2017-06-14 100 views
1

我的問題是Where子句table1.Field<string>(3) == table2.Field<string>(3)。這些值是0或1,我認爲linq會將其更改爲bool值。 Linq得到「無法將類型'System.Boolean'的對象轉換爲鍵入'System.String'」。linq查詢越來越無法轉換'System.Boolean'類型的對象來鍵入'System.String'

我試過table1[3].ToString() == table2[3].ToString(),但它沒有出現錯誤或匹配的行,我知道它應該拿出一些。

我的查詢:

var match = (from table1 in dt1.AsEnumerable() 
        join table2 in dt2.AsEnumerable() on table1[1].ToString() equals table2[1].ToString()) 
        where table1.Field<string>(3) == table2.Field<string>(3) 
        && table1.Field<string>("ID") == table2.Field<string>("ID") 
        select table1).ToList(); 

我期待添加更多的地方在該行的條款,但它無法對具有0或1的值來比較的。

感謝您的幫助

+0

如果刪除條件,你有你的結果記錄? – Hackerman

+0

你嘗試過'String.Equal()'方法嗎? – Media

+0

@Hackerman是的。我甚至可以添加沒有值爲0或1的其他Where子句,它可以工作 –

回答

2

所以看起來根本問題是table1[3]System.Stringtable2[3]System.Boolean。所以演員在table2.Field<string>(3)上失敗。

因此,與相應的測試取代你where

where (table1.Field<string>(3) == "1") == table2.Field<bool>(3) 
+0

我使用字符串的原因是因爲Datatable中的值不是一個bool值,但更多的是int;然而,我將添加的某些where子句將具有值0,1,A,B。所以我希望我可以使用

+0

我認爲你需要找出類型'dt1.Rows [0 ] [3]' - 「Field」必須匹配。 – NetMage

+0

我收到「指定的演員表無效」。當使用'table1.Field (3)== table2.Field (3)' –

相關問題