2012-04-13 43 views
7

我有這個疑問機智組加入:LINQ - '連接子句中的一個表達式的類型不正確。在對'GroupJoin'的調用中,類型推斷失敗。'

foreach (var item in someList) 
    { 
        var result = (from t1 in someContext.Table1 
            join t2 in someContext.Table2 on new { t1.SomeID, item.SomeName} equals new {t2.SomeID, t2.SomeName} into j1 
            ... 
    } 

我想知道是否有可能有一組如上加入?

new { t1.SomeID, item.SomeName} equals new {t2.SomeID, t2.SomeName} 

item.SomeName來自我正在迭代的列表。

如果不是,我將如何更改語句以獲得所需的結果?

+0

可能重複:http://stackoverflow.com/questions/3020442/linq-joining-in-c-sharp-with-multiple-conditions – 2012-04-13 08:14:32

回答

19

與等號表達式一起使用的屬性類型必須匹配。因此,例如Table1.SomeIDInt32Table2.SomeIDNullable<Int32>,則它們不匹配。

編輯

foreach (var item in someList) 
    { 
     var someName = item.SomeName; 
     var result = (from t1 in someContext.Table1 
        join t2 in someContext.Table2 on 
           new { t1.SomeID, SomeName = someName} 
         equals new { t2.SomeID, t2.SomeName} into j1 
            ... 
    } 

還要檢查item.SomeName是同一類型t2.SomeName

+0

它們匹配,雖然,但當我把'item.SomeName'改爲't1.SomeName'時,它編譯...那麼這不是問題嗎?無法加入查詢範圍外的字段? – Willem 2012-04-13 08:20:08

+0

查看我的更新請 – 2012-04-13 08:32:04

+3

'SomeName = someName'完成了任務。謝謝。 =) – Willem 2012-04-13 11:09:06

10

在這種情況下,你必須確保這兩個新的匿名對象的屬性和類型是相同。我通常會給出特定的屬性名稱。

例:

var result = from t1 in someContext.Table1 
       join t2 in someContext.Table2 on 
          new { SomeID = t1.SomeID, SomeName = someName} equals 
          new { SomeID = t2.SomeID, SomeName = t2.SomeName} into j1 
+0

給同名連接鍵做了事。很奇怪,類型雖然匹配。 – 2013-08-16 10:40:01

+1

看來,不僅必須在順序和類型的比賽,但如此也必須被比較的字段/屬性的名稱。如果您正在比較新{x.aid,x.zid}等於新{y.aid,y.id}然後你只需要姓名的相關ZID或ID來匹配其他一切都將編譯。例如:new {x.aid,x.zid}等於new {y.aid,zid = y.id} – JBC 2014-09-17 20:46:55

相關問題