如何将表连接到多个表?我们可以在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
提前致谢
答案 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
中说出来