我用这样的投影:
Dim mylist = (From t In context.Myobj1 where t.id=6 _
Select New With {_
.Parent = t, _
.fd = t.ch1.Where(Function(t3) t3.vl>5), _
.fh = t.ch2 _
}).ToList问题是ch1有一个子集合"ch11“,我想在这个投影中包括它。
谢谢!
--我使用下面建议的解决方案进行了一些测试,发现了以下问题:
1)有时第二级儿童不是loaded.But,奇怪的是,只有在第一级儿童只有一个项目与这个二级子女有关的情况下才会发生这种情况。(例如,如果在ch1中只有一个项与ch11中的特定项相关,则不会加载ch11中的该项)
2)这个解决方案只适用于二级儿童(当然是第1层所描述的问题)。如果尝试与第三级或更高级别应用相同的逻辑,则无法工作。
有解决办法吗?谢谢!
发布于 2015-02-08 00:09:13
您可能注意到不能使用Include (就像在t.ch1.Include...中那样)。因此,您必须将子集合添加到投影中,例如创建一个嵌套的匿名类型:
Dim mylist = (From t In context.Myobj1 where t.id=6 _
Select New With {_
.Parent = t, _
.fd = From c1 in t.ch1.Where(Function(t3) t3.vl > 5) _
Select New With { _
c1 _
.c11 = c1.ch11 _
}, _
.fh = t.ch2 _
}).ToList现在,ch1将拥有他们的子集合ch11,因为EF通过关系修复来填充它们。
你可以证明如果你关掉懒惰的装载..。
context.Configuration.LazyLoadingEnabled = False然后做..。
myList.First().fd.First().c1.ch11(不是myList.First().fd.First().c11)
您将看到第一个c1的ch11集合在不执行新查询的情况下返回。(在启用延迟加载的情况下,它将运行一个查询,因为只有通过关系修复填充时,c1.ch11才会标记为loaded )。
https://stackoverflow.com/questions/28388638
复制相似问题