2017-06-14 21 views
1

問題はWhere句table1.Field<string>(3) == table2.Field<string>(3)にあります。これらの値は、0または1のいずれかです。linqはそれをbool値に変更します。 Linqは "'System.String'型の型 'System.Boolean'のオブジェクトをキャストできません。linqクエリが 'System.String'型に 'System.Boolean'型のオブジェクトをキャストできません

私は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(); 

私は、行の詳細where句を追加するために探していますが、それは比較する0または1の値を持っているものに失敗します。根本的な問題がtable1[3]あるように助け

+0

あなたはその条件を削除した場合、あなたは結果のレコードを持っているのですか? – Hackerman

+0

'String.Equal()'メソッドを試してみましたか? – Media

+0

@Hackermanはい。 0または1の値を持たない他のWhere節を追加することもできます。 –

答えて

2

ため

おかげで、だから、見えSystem.Stringあるとtable2[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)' –

関連する問題