2012-09-25 31 views
1

我想知道如何在通过多个字段连接两个表时在Linq中编写内部连接。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(); 

但是,编译器显示,说的方法不能从使用推断错误。

谢谢。

+3

您的示例代码中有一个流氓关闭大括号,一件事。请向我们展示您尝试的*确切*代码,以及它带来的问题。哦,我怀疑在最后一个参数中,你的意思是'one.fieldThree'而不是'tableOne.fieldThree'。一个简短的*完整的*示例(使用数据模型)将使它更容易帮助你。 –

+0

看看http://stackoverflow.com/questions/373541/how-to-do-joins-in-linq-on-multiple-fields-in-single-join –

+0

@JonSkeet:改正。 – Heathcliff

回答

1

你的方法是好的,将工作。您只需修复编译器错误。可能你的查询中的两个匿名类型不是同一类型。如果字段的顺序改变,或者它们的类型不完全匹配,这很容易发生。

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

+0

两者都是相同的类型。 – Heathcliff

+0

我纠正自己:你是对的。他们是不同的类型。解决,谢谢。 – Heathcliff

0

我能看到的最简单的方法是使用'联合'方法。只需从两个表中提取您的数据,然后使用联合就可以了。这将连接两个表而不重复。

+0

不解决来自C#编译器的类型错误。 – usr