2011-12-06 71 views
3

如何將表加入到多個表中?這樣的事情,我們可以很容易做到在SQLEF4如何將表加入兩個或多個其他表

SELECT p.* FROM Person.BusinessEntity AS e 
INNER JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID 
AND e.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.BusinessEntityContact AS b 
ON e.BusinessEntityID = b.BusinessEntityID AND p.BusinessEntityID = b.PersonID 

在此先感謝

+0

查看本頁上的最後一個示例:http://msdn.microsoft.com/en-us/library/bb896266.aspx – kol

+0

是的,它顯示瞭如何在兩個表之間進行連接,以及msdn還有兩個連接示例字段,但僅限於另一個表。我需要使用兩個其他表,如「INNER JOIN Person.BusinessEntityContact AS b ON e.BusinessEntityID = b.BusinessEntityID AND p.BusinessEntityID = b.PersonID」 – Bhuvan

+2

請參閱此答案:http://stackoverflow.com/questions/1264993/linq-left-join-on-multiple-or-conditions或基本上連接使用一個新的對象進行比較'在新的{e.BusinessEntityID,p.BusinessEntityID}的Person.BusinessEntityContact中加入b等於new {b.BusinessEntityID ,b.PersonID}' –

回答

2

一般情況下,你只是堆的加入,就像你在SQL做。我發現原來的問題已經被澄清了一點,並且可能需要組合鍵連接,所以它將是堆疊連接與組合鍵的組合。 Gary.S在他對原始問題的評論中指出了複合關鍵部分的正確語法,但我在這裏讚揚我的答案,以包含相同的複合關鍵字選擇。對於常規聯接,您使用

而對於組合鍵,您可以使用匿名類型來包含來自兩個實體的所有鍵列。

這裏應該是什麼你正在尋找

var items = from e in Person.BusinessEntity 
     join p in Person.Person on 
      e.BusinessEntityID equals p.BusinessEntityID 
     join b in Person.BusinessEntityContact on 
      new {e.BusinessEntityID, p.BusinessEntityID} equals 
      new { b.BusinessEntityID, b.PersonID} 
     select p; 

您可能還需要看看羣組加入,你爲了做一個左外需加入LINQ的例子。

集團加盟的樣子:

join … in … on … equals … into … 

的大多數情況下很好的例子可以在101 samples page

1

發現有思想的學校,如果你已經創建了自己的實體框架模型正確,那麼你不該在你的查詢中根本不需要使用連接。您所有的加入實際上應該是導航性能(我取出從查詢人模式),即

BusinessEntity.Person.Where(x => x == yourID) 

或更清楚大概

Entity1.Entity2.Where(x => x == yourID) 

不是我原來的想法 - 朱莉·勒曼說,在她EF book