EF4如何将表连接到两个或多个其他表

时间:2011-12-06 21:54:28

标签: c# entity-framework-4

如何将表连接到多个表?我们可以在SQL中轻松完成这样的事情

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

提前致谢

2 个答案:

答案 0 :(得分:2)

通常,您只需像在SQL中一样堆叠连接。我看到原始问题已经澄清了一点,并且可能需要复合键连接,因此它将是堆叠连接与复合键的组合。 Gary.S在对原始问题的评论中注意到复合关键部分的正确语法,但我在此修改了我的答案,包括相同的复合键选择。对于常规联接,您可以使用

 join … in … on … equals … 

对于复合键,您使用匿名类型来包含来自两个实体的所有键列。

以下是一个关于你要找的内容的例子

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;

您可能还需要查看GroupJoin,以便在LINQ中执行左外连接。

群组加入看起来像:

join … in … on … equals … into …

大多数情况的好例子可以在101 samples page

找到

答案 1 :(得分:1)

有一种观点认为,如果您已正确创建实体框架模型,那么您不必在查询中使用连接。你的所有联接实际上应该是导航属性(我从查询中取出了Person模式),即

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

或更明显可能

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

不是我最初的想法 - 朱莉·勒曼在她的EF book

中说出来