【问题标题】:EF4 how to join a table to two or more other tablesEF4如何将一个表连接到两个或多个其他表
【发布时间】:2011-12-07 16:14:32
【问题描述】:

如何将一个表连接到多个表?这样的事情我们可以在 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

提前致谢

【问题讨论】:

  • 查看本页最后一个示例:msdn.microsoft.com/en-us/library/bb896266.aspx
  • 是的,它显示了如何在两个表之间连接,msdn 还提供了连接两个字段但仅连接到另一个表的示例。我需要与其他两个表进行连接,例如“INNER JOIN Person.BusinessEntityContact AS b ON e.BusinessEntityID = b.BusinessEntityID AND p.BusinessEntityID = b.PersonID”
  • 看到这个答案:stackoverflow.com/questions/1264993/… 或者基本上连接使用一个新对象进行比较join b in Person.BusinessEntityContact on new {e.BusinessEntityID, p.BusinessEntityID} equals new { b.BusinessEntityID, b.PersonID}

标签: c# entity-framework-4


【解决方案1】:

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

 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找到

【讨论】:

    【解决方案2】:

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

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

    或者更清楚的可能

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

    不是我最初的想法 - Julie Lerman 在她的 EF book 中说过

    【讨论】:

      猜你喜欢
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多