2012-09-25 25 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