为什么LINQ SelectMany会忽略include ?(实际上会删除加载的数据)

本文关键字:删除 实际上 加载 数据 SelectMany LINQ include 为什么 | 更新日期: 2023-09-27 18:09:17

var result = ParentTable.Set
.Include("Children")
.Include("Children.GrandChildren")
.SelectMany(p=>p.Children)
.Where(c=>c.GrandChildren.Any(whatever))

将返回null,即使

var result = ParentTable.Set
.Include("Children")
.Include("Children.GrandChildren")

包含完整填充的数据。

需要做

 var result = ParentTable.Set
.SelectMany(p=>p.Children)
.Include("GrandChildren")
.Where(c=>c.GrandChildren.Any(whatever))

这个例子有点人为,但是我遇到了这个问题,作为一个更大更复杂查询的一部分,其中子选择投影使用SelectMany将计数填充到特定属性中,其他数据从SelectMany外部投影到其他属性中,这些属性正在填充,但SelectMany计数没有。查询的不同部分如何延迟加载相同数据的不同部分,这是非常令人困惑的!

为什么LINQ SelectMany会忽略include ?(实际上会删除加载的数据)

您应该使用ThenInclude来获取孩子。我将把您的查询重写为:

var result = ParentTable.Set
.Include(p => p.Children)
.ThenInclude(c => c.GrandChildren.Where(gc => gc.whatver))
.SelectMany(p => p.Children)