首页 > 解决方案 > Linq 返回分组结果

问题描述

我有以下数据库实体,其中包含要放在披萨上的成分。Column Type 是另一个表的外键,其中包含有关成分类别(奶酪、肉类、蔬菜等)的信息。

public class Ingredient
{
    public int IngredientId { get; set; }

    public string Name { get; set; }

    public bool IsVegetarian { get; set; }

    public int Type { get; set; }
}

部分样本数据: 样本成分

对于每个唯一的“类型”值,我想返回该类型的成分列表。最终结果将存储在成分视图模型类型的 ICollection 中。

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;
}

标签: c#linqlambda

解决方案


最明显的是:Ingredients = g.ToList().


推荐阅读