У меня есть следующий объект базы данных, содержащий ингредиенты для пиццы.Тип столбца - это внешний ключ к другой таблице, содержащей информацию о категории ингредиентов (сыр, мясо, овощи и т. Д.)
public class Ingredient
{
public int IngredientId { get; set; }
public string Name { get; set; }
public bool IsVegetarian { get; set; }
public int Type { get; set; }
}
Некоторые данные выборки: образцы ингредиентов
Для каждого уникального значения «Тип» я хочу вернуть список ингредиентов с этим типом.Окончательный результат будет сохранен в ICollection типа IngredientViewModel.
public class IngredientViewModel : Model
{
public IngredientCategory Category { get; set; }
public List<Ingredient> Ingredients { get; set; }
}
Как наилучшим образом получить все ингредиенты, сгруппированные по категориям, в одну поездку базы данных с использованием выражений linq или lambda?
В настоящее время у меня есть следующий фрагмент, который я нахожу немного грязным:
public async Task<IEnumerable<IngredientViewModel>> GetIngredientsPerCategoryAsync()
{
IEnumerable<Ingredient> result = await _repo.GetAllAsync();
IEnumerable<IngredientViewModel> viewModels = result.GroupBy(
x => x.Type,
(category, ingredients) => new IngredientViewModel()
{
Category = (IngredientCategory)category,
Ingredients = MapFromEntities(ingredients)
})
.OrderBy(x => x.Category.ToString())
.ToList();
return viewModels;
}