LINQ使用点表示法和多个连接字段加入

时间:2012-09-25 15:59:47

标签: c# linq join

我想知道在通过多个字段连接两个表时,如何在Linq中编写内部联接。

例如,假设这是SQL等价物:

SELECT tableOne.fieldThree

FROM table_One AS tableOne,
     table_Two AS tableTwo,
WHERE
     tableOne.fieldOne == tableTwo.fieldOne AND
     tableOne.fieldTwo == tableTwo.fieldTwo;

我试过了:

tableTwo.Join(tableOne,
              two => new { two.fieldOne, two.fieldTwo },
              one => new { one.fieldOne, one.fieldTwo },
              (two, one) => one.fieldThree)
        .ToList();

但编译器显示的错误表明无法从使用中推断出该方法。

感谢。

2 个答案:

答案 0 :(得分:1)

你的方法很好并且会奏效。您只需要修复编译器错误。可能是,查询中的两个匿名类型不是同一类型。如果字段的顺序发生变化,或者它们的类型不完全匹配,则很容易发生这种情况。

但这是一个C#问题。一旦你通过,你的ORM将支持这一点。

答案 1 :(得分:0)

我能看到的最简单方法是使用' Union'方法。只需通过多个字段从两个表中提取数据,然后在它们上使用Union。这将连接两个表,没有重复。