2

LINQ30 分前まで C# 内で使用したことがなく、オンラインでクエリに対する回答を見つけるのに苦労しています (おそらく私の理解不足のため)。

簡単なクエリがあります

var variableName = from a in tableName.AsEnumerable()
    where a.column1 == item1
        && a.column2 == item2
        && a.column3 != null
    select a;

SQL 列は int、null として定義されます。

コードが のデータベースで null のレコードを検出するとcolumn3、次のエラーが生成されます " the value for column3 in table <tableName> is DBNull"。

をチェックする代わりに、!= null何か他のものを使用する必要があると思いますが、DBNull.Value をチェックしようとしましたが、コンパイラは " Operation != cannot be applied to operands of type int and system.DBNull" と述べています。

何か案は?

4

4 に答える 4

6

これは型指定されたデータセットのように見えます: yeuch -それらの使用はやめてください。

そのため、その値が の場合、アクセスするa.column3と常に例外が発生しますDBNull。型付きデータセット パターンを使用する必要があります。

&& !c.Iscolumn3Null()
于 2013-07-03T12:16:03.683 に答える
0

tableName.AsEnumerable()クエリをメモリ内に作成するため、すべてのテーブル行が DB からダウンロードされ、アプリケーションで条件がチェックされます。

それを試してください:

var variableName = from a in tableName
                   where a.column1 == item1
                       && a.column2 == item2
                       && a.column3 != null
                   select a;

これを SQL クエリに変換し、必要な行のみをダウンロードする必要があります。

于 2013-07-03T12:10:41.763 に答える
0

試す

var variableName = from a in tableName.AsEnumerable()
    where a.column1 == item1
        && a.column2 == item2
        && !DBNull.Value.Equals(a.column3)
    select a;

どうやら、型付きデータセットを読む必要があるようです:)そして、それらを決して使用しない理由

于 2013-07-03T12:12:20.303 に答える