LINQ查询应在何处添加分组,以合并同分类ID下的item到同一列表
LINQ查询分组修改方案
修改位置
你需要在_sqlDbContext.RequestTemplateItems.Where(...)筛选逻辑之后,原本的Select映射逻辑之前添加按分类ID分组的逻辑。
修改后完整代码
var query = _sqlDbContext.RequestTemplates .Select(rt => new TemplateViewModel { templateName = rt.TemplateName, requests = _sqlDbContext.RequestTemplateItems .Where(ti => ti.RequestTemplateID == rt.RequestTemplateID) // 新增分组逻辑:按分类ID+分类名称分组,同个分类的所有条目归为一组 .GroupBy(ti => new {ti.RequestCategoryID, ti.RequestCategory.RequestCategoryName}) .Select(g => new RequestViewModel { category = new CategoryViewModel { categoryId = g.Key.RequestCategoryID, categoryName = g.Key.RequestCategoryName }, // 直接将分组内所有条目映射为ItemViewModel集合 items = g.Select(ti => new ItemViewModel { itemName = ti.ItemName, dueDate = ti.DueDate, notes = ti.Notes }).ToList() }) .ToList() });
逻辑说明
- 原逻辑中每条
RequestTemplateItem记录都会生成一条独立的RequestViewModel,因此同分类下的多个条目会产生多条重复分类的请求记录 - 新增分组后,同一
RequestCategoryID下的所有条目会被归为同一个分组,单个分组映射为一条RequestViewModel,分组内所有条目直接转换为items列表的元素,即可实现同分类下条目合并的需求。 - 分组key同时包含分类ID和分类名称,是为了兼容EF Core的SQL翻译规则,避免运行时查询报错。
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

