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

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

Мое приложение находится на веб-API ASP.NET CORE 5. Оно имеет KitchenOrigins, каждый из которых содержит набор 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).

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

Как в заголовке: Как лучше всего это сделать? Может быть 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();
}
Другие вопросы по тегам