c# - 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;
}
解决方案
最明显的是:Ingredients = g.ToList()
.
推荐阅读
- python - 如何通过 Google Analytics API 找到回访者的百分比
- html - 无法在渐变 div 上设置过渡,但无法在图像上设置不透明度,因为它也设置子元素不透明度
- arrays - 如何从 Reason 更新 JS 类型数组?
- sql - 如何在 Visual Studio 中设置 SQL 数据库项目中的数据库连接字符串?
- laravel - SQLSTATE [42P01]:未定义表:7 ERREUR:la relationship n'existe pas
- visual-studio-code - 树莓派找不到带有 rmate 命令的 VSCode
- java - EclipseLink 中的缓存 - 防止使用相同参数的重复查询
- ruby-on-rails - Rails 测试 Basic Auth 标头
- excel - 将用户表单文本数据格式化为日期和货币格式
- php - Auth::id() 在 Laravel api 请求中为空