0

linq から sql への文字列 (varchar) 列に値として null を渡すにはどうすればよいですか? 一部の行の列 (たとえば、Col_A) に NULL があり、他の行の値が "NotNull" (文字列) であるテーブルをクエリしようとしています。

string s = null;

var query = (from r in context.Table1
            where r.Col_A == s
            select r).ToList();

これは 0 行を返します。しかし、s を「NotNull」に設定すると、期待どおりに行が返されます。

どんなポインタも役に立ちます。

4

2 に答える 2

4

厄介なバグがあり、場合によっては次の動作が異なる場合があります。

where x.Foo == null

where x.Foo == s

sたまたま実行中の場所null。基本的に、いくつかのユースケースでは、誤って以下を使用してしまう可能性があります。

WHERE [x].[Foo] = @p3

値を使用@p3nullますが、ANSI 準拠の SQL では明らかに意味がありません。

パラメータ値が である可能性のあるテストを行っている場合は、特殊なケースを作成し、C# でリテラルnullを使用してクエリをコーディングすることをお勧めします。式ビジターを使用してこの事後処理を適用するコードがいくつかありましたが、 special-case の方が簡単です。そう: nullnull

var query = // some core query

if(s == null) { query = query.Where(x => x.Foo == null); }
else { query = query.Where(x => x.Foo == s); }
于 2012-10-03T19:55:46.497 に答える
0

DBNull.Value を試しましたか? それはnullに相当する.netのDBです。

于 2012-10-03T19:48:51.247 に答える