如何在C#嵌套LINQ中构建树形结构的Details列表?
解决方案
首先确保你的DetailsDto和MainDto结构定义正确,示例如下:
// 单个详情项的DTO public class DetailsDto { public string Description { get; set; } public string Name { get; set; } } // 主DTO public class MainDto { public decimal Price { get; set; } public List<DetailsDto> Details { get; set; } }
接下来修改你的LINQ查询,通过分组将关联的m实例转换为DetailsDto列表,赋值给MainDto的Details字段:
var data = await Task.FromResult(( from c in _context.C join mc in _context.MC on c.VId equals mc.VId join m in _context.M on mc.Id equals m.mcId where mc.Id == mcId && c.Id == CId // 按mc的Price分组,确保同一组内的m属于同一个主记录 group m by new { mc.Price } into groupedData select new MainDto() { Price = groupedData.Key.Price, // 将分组内的m逐个转换为DetailsDto并组成列表 Details = groupedData.Select(item => new DetailsDto() { Description = item.description, Name = item.Name }).ToList() } ).FirstOrDefault());
说明
- 原查询的join会生成多组
c-mc-m关联数据,通过group操作可以将属于同一主记录(相同Price)的m项聚合在一起。 - 使用
Select将每个m实例的description和Name映射到DetailsDto的对应属性,再通过ToList()生成列表赋值给Details字段。
内容的提问来源于stack exchange,提问作者Saleh Sayeem
相关产品推荐
相关产品推荐

