【问题标题】:linq to sql: join multiple columns from the same tablelinq to sql:连接同一个表中的多个列
【发布时间】:2010-09-25 14:48:06
【问题描述】:

如何通过 Linq 内部连接来自同一个表的多个列?

例如: 这个我已经有了...

join c in db.table2 on table2.ID equals table1.ID

我需要添加这个...

join d in db.table2 on table2.Country equals table1.Country 

【问题讨论】:

    标签: linq-to-sql join


    【解决方案1】:

    这是我能够让它工作的唯一方法(在 c# 中)。

    var qry = from t1 in table1
              join t2 in table2
              on new {t1.ID,t1.Country} equals new {t2.ID,t2.Country}
              ...
    

    【讨论】:

      【解决方案2】:

      您可以将查询放在 Where 子句中,而不是使用连接运算符。

      连接运算符在 VB.NET 中支持多个子句,但在 C# 中不支持。

      或者,您可以使用 ANSI-82 样式的“SQL”语法,例如:

      from t1 in table1
      from t2 in table1
      where t1.x == t2.x
      && t1.y == t2.y
      

      【讨论】:

      • 近 20 年前,这种逻辑结构在 sql 中已被弃用。 (stackoverflow.com/questions/334201/…) 在 linq 中匹配它并没有错,尤其是在像这样的小查询中,但是 Pete Haas 的语法在风格上更可取
      【解决方案3】:

      来自http://www.onedotnetway.com/linq-to-sql-join-on-multiple-conditions/

      这两个表都将 PostCode 和 CouncilCode 作为公共字段。假设我们要从 ShoppingMall 中检索所有 PostCode 和 CouncilCode on House 匹配的记录。这要求我们使用两列进行连接。在 LINQ 中,可以使用匿名类型来完成这样的连接。这是一个例子。

      var query = from s in context.ShoppingMalls
              join h in context.Houses
              on
              new { s.CouncilCode, s.PostCode }
              equals
               new { h.CouncilCode, h.PostCode }
              select s;
      

      【讨论】:

      • 不知道使用查询语法查找多列 linq 连接的示例需要花费多少谷歌搜索。谢谢。
      【解决方案4】:
      var query = from s in context.ShoppingMalls
      join h in context.Houses
      on
      new {CouncilCode=s.CouncilCode, PostCode=s.PostCode }
      equals
      new {CouncilCode=h.District, PostCode=h.ZipCode }
      select s;
      

      这适用于任何类型的数据类型。

      【讨论】:

        【解决方案5】:

        在 VB 中:

         dim qry = FROM t1 in table1 _
                   JOIN t2 in table2 on t2.ID equals t1.ID _
                   AND t2.Country equals t1.Country 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-03
          • 2012-05-06
          • 1970-01-01
          • 2021-10-29
          • 2010-09-21
          • 1970-01-01
          相关资源
          最近更新 更多