首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架:在投影中包含多个子级

实体框架:在投影中包含多个子级
EN

Stack Overflow用户
提问于 2015-02-07 23:16:53
回答 1查看 306关注 0票数 0

我用这样的投影:

代码语言:javascript
复制
   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层所描述的问题)。如果尝试与第三级或更高级别应用相同的逻辑,则无法工作。

有解决办法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-02-08 00:09:13

您可能注意到不能使用Include (就像在t.ch1.Include...中那样)。因此,您必须将子集合添加到投影中,例如创建一个嵌套的匿名类型:

代码语言:javascript
复制
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通过关系修复来填充它们。

你可以证明如果你关掉懒惰的装载..。

代码语言:javascript
复制
context.Configuration.LazyLoadingEnabled = False

然后做..。

代码语言:javascript
复制
myList.First().fd.First().c1.ch11

(不是myList.First().fd.First().c11)

您将看到第一个c1ch11集合在不执行新查询的情况下返回。(在启用延迟加载的情况下,它将运行一个查询,因为只有通过关系修复填充时,c1.ch11才会标记为loaded )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28388638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档