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

C# Linq to SQL中用Lambda表达式将GroupJoin结果转主从结构列表的方法

主从结构查询代码调整方案

你当前得到扁平化结果是因为代码中调用了SelectMany方法,该方法的作用就是将GroupJoin生成的主从分组结构展开为扁平化的一对一结果,要得到Master-Details主从结构,直接移除SelectMany相关逻辑,在GroupJoin的结果投影中直接构造主从嵌套结构即可。

修改后的代码示例

var temp = DC.tContentTypes.Where(/* 保留原有主表过滤条件 */)
             .GroupJoin(
                       DC.tSubContentTypes,
                       itemContentType => itemContentType.ContentTypeId,
                       itemSubContentType => itemSubContentType.ContentTypeId,
                       // 直接构造主从嵌套结构
                       (itemContentType, itemSubContentType) => new 
                       {
                           // 主表实体,可按需提取单个字段
                           ContentType = itemContentType,
                           // 关联的从表集合,无匹配数据时自动为空集合
                           SubContentTypes = itemSubContentType.ToList()
                       }
                      )
             .OrderBy(item => item.ContentType.Order)
             .ToList();

补充说明

  • 若需要对从表集合做排序、过滤等处理,可在投影从表时直接操作,示例:SubContentTypes = itemSubContentType.Where(x => x.Status == 1).OrderBy(x => x.Order).ToList()
  • GroupJoin本身已处理无匹配从表数据的场景,无需额外加DefaultIfEmpty,无关联数据时从表集合默认是空集合,不会触发空引用异常
  • 最终返回的结果中每个元素都是主表对象+对应从表集合的嵌套结构,符合Master-Details的结构要求

内容的提问来源于stack exchange,提问作者MrMining

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:03