如何扁平化一对多关联Join结果,实现单个A对应单个D?
解决方案
你可以用LINQ的SelectMany方法实现结果扁平化,它会把嵌套的集合展开,将每个A和对应的D逐一配对。修改后的查询如下:
var flattenedResult = from a in dbContext.As join b in dbContext.Bs on a.Id equals b.A.Id from d in b.AList.Select(listItem => listItem.ObjectOfTypeD) select new { A = a, D = d };
补充说明:
- 这里的
from d in ...等价于LINQ方法语法里的SelectMany,它会遍历每个b.AList转换后的D集合,把每个D元素和当前的A组合成新的匿名对象。 - 最终结果是一个列表,每个元素都是单个A实例与单个D实例的配对,完全符合你需要的扁平化结构。
- 只要你的EF Core版本支持,这个查询会被正确翻译成SQL关联语句,不会在客户端做额外的内存展开,性能有保障。
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

