17

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

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

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

我需要添加这个...

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

5 回答 5

31

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

var qry = from t1 in table1
          join t2 in table2
          on new {t1.ID,t1.Country} equals new {t2.ID,t2.Country}
          ...
于 2008-12-06T01:04:20.637 回答
14

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

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

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

from t1 in table1
from t2 in table1
where t1.x == t2.x
&& t1.y == t2.y
于 2009-04-30T13:25:01.387 回答
13

来自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;
于 2009-07-16T17:36:48.373 回答
6
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;

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

于 2012-06-18T06:26:46.583 回答
1

在 VB 中:

 dim qry = FROM t1 in table1 _
           JOIN t2 in table2 on t2.ID equals t1.ID _
           AND t2.Country equals t1.Country 
于 2008-12-05T23:02:58.637 回答