#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, в которых есть рецепты, не было указано никакой фильтрации / предиката для рецептов. если я чего-то не упустил