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
相关产品推荐
相关产品推荐

