2013-03-14 162 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