Каков наилучший способ проверить, содержит ли список какой-либо элемент конкретной коллекции?

#c# #asp.net-core #entity-framework-core #asp.net-core-webapi #asp.net-core-5.0

#c# #asp.net-core #entity-framework-core #asp.net-core-webapi #asp.net-core-5.0

Вопрос:

Каков наилучший способ получить список, который содержит только некоторые данные?

Мое приложение включено ASP.NET Веб-API ЯДРА 5. В нем есть KitchenOrigin s, каждый из которых содержит коллекцию Recipes .

    public class KitchenOrigin
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Code { get; set; }
            public ICollection<Recipe> Recipes { get; set; }
        }
    }
  

Пока мое приложение запущено, я заполняю некоторые данные (). Recipes

KitchenOrigin s очень много, поэтому я хотел бы получить только список KitchenOrigin s, содержащий Recipe s.

Как в названии: каков наилучший способ сделать это? Может IQueryable быть? Не могли бы вы помочь мне с этим?

Вот мой код:

Репозиторий

  public async Task<IEnumerable<KitchenOrigin>> GetKitchenOriginsWithRecipesAsync()
        {
            return await _context.KitchenOrigins
            .Include(k => k.Recipes)
           .ToListAsync();
        }
  

Контроллер

 [HttpGet("kitchen-origins")]
        public async Task<ActionResult> GetKitchenOrigins()
        {
            var kitchenOrigins = await _recipeRepository.GetKitchenOriginsWithRecipesAsync();
            return Ok(kitchenOrigins);
        }
  

Ответ №1:

Вы можете использовать .Where() для фильтрации и .Any() проверки, является ли он пустым или нет.

 public async Task<IEnumerable<KitchenOrigin>> GetKitchenOriginsWithRecipesAsync()
{
    return await _context.KitchenOrigins
      .Where(k => k.Recipes.Any())
      .Include(k => k.Recipes)
      .ToListAsync();
}
  

Комментарии:

1. опередите меня, но можете ли вы поместить предикат и условия в оператор any для op, пожалуйста

2. @SimonPrice Я полагаю, что он просто хотел, чтобы в kitchenOrigins, в которых есть рецепты, не было указано никакой фильтрации / предиката для рецептов. если я чего-то не упустил