查询在varchar列上使用NULL

时间:2012-10-03 19:46:38

标签: c# sql sql-server linq linq-to-sql

如何将null作为值传递给从linq到sql的字符串(varchar)列?我正在尝试查询表中某些行对于列(例如,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”,我会按预期返回行。

任何指针都会有所帮助。

2 个答案:

答案 0 :(得分:4)

有一个恼人的错误,在某些情况下,以下内容可能会有所不同:

where x.Foo == null

VS

where x.Foo == s

执行时s恰好是null。基本上,在某些用例中,它可能会错误地结束使用:

WHERE [x].[Foo] = @p3

@p3 null值,但在ANSI兼容SQL中显然不合理。

如果您正在进行参数值可能为null的测试,我建议您使用 { {1}}在C#中。我确实有一些代码可以使用表达式访问者在事后应用它,但对于特殊情况null来说更容易。所以:

null

答案 1 :(得分:0)

你试过DBNull.Value吗?这是.net的DB相当于null。