2013-03-14 258 views
1

我有3个EF ObjectSets:家长,儿童和宠物,有一对多的关联(家长可以有mayn儿童和儿童可以有很多宠物)。 对于给定的家长,我需要获得这位家长的所有孩子拥有的所有宠物。LINQ to Entities查询相关实体

我很担心,如果该查询是正确的还是可以更加高效:

Dim query = From par In context.Parents 
      From child In par.Childrens 
      From pet In child.Pets 
      Where par.parent_id = 1 
      Select pet 

回答

0

该查询是正确的,虽然它是一个cross-join - 简直就是两套Cartesian product - 。

您可以根据equality条件明确指定join

var query = from par in context.Parents 
      join child in context.Childrens on child.ParentID equals par.ID 
      join pet in context.Products on child.ID equals pet.ChildID 
      Where par.parent_id = 1 
      select new { par.Name, par.Id }; 
+0

好的,这是一个更有效的方式来查询这样的事情吗?我认为在LINQ中明确定义连接是不需要的。 – Nuts 2013-03-14 08:59:55

+0

您的查询将生成一组记录,显示两个表之间的所有可能组合。这是大集合的性能问题。你需要的结果不需要。阅读更多http://geekswithblogs.net/berthin/archive/2012/05/25/how-to-perform-cross-join.aspx - http://www.c-sharpcorner.com/UploadFile/3d39b4/inner- join-cross-join-and-left-outer-join-with-linq-to-sql/ – MuhammadHani 2013-03-14 09:13:21

+0

谢谢。表现是我​​的关注点,至少你让我走向正确的方向。 – Nuts 2013-03-14 09:57:02