You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:43:51