Entity Framework 过滤孙子实体

4
如果我有以下表格:
Parent: 拥有 ParentId
Child: 拥有 ChildIdParentId
Grandchild: 拥有 GrandchildIdChildIdQuantity

最好的方法是什么,以检索具有大于10(例如)数量的孙子的父母的列表?

我尝试使用 Linq to Entity,生成了如下内容:

context.Parent.Includes("Children").Include("GrandChildren").Where( ... )

但不确定语法,而且我也在想性能问题——include是否加载所有对象?有没有更好的方法来完成这个任务?

2个回答

6

试试这个:

var query = context.Parents
                   .Where(p => p.Children.Any(
                          c => c.GrandChildren.Any(g => g.Quantity > 10));

Include命令确实会加载所有与已加载父级相关的子级和孙级实体。


3

使用这种方法性能不佳...

context.Parent.Includes("Children").Include("Children.GrandChildren").Where( ... )

如果您在以后需要子孙节点,或者根本不需要它们,请尝试稍后加载它们,使用以下代码实现:
if (!parent1.ChildrenReference.IsLoaded)    
     parent1.ChildrenReference.Load();

如果您有100个父记录,那么这种技术将为每个父记录运行一个子查询,导致100个查询,因此性能可能会更差。请参阅关于N+1查询的文献。 - AaronLS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接