在 varchar 列上使用 NULL 进行查询



如何将 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",我会按预期返回行。

任何指针都会有所帮助。

有一个烦人的错误,在某些情况下,以下内容的工作方式可能不同:

where x.Foo == null

where x.Foo == s

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

WHERE [x].[Foo] = @p3

@p3一个null值,但显然这在符合 ANSI 的 SQL 中是不明智的。

我建议您是否正在执行参数值可能null的测试,请将其特殊情况,并使用 C# 中的文字null对查询进行编码。我确实有一些代码可以使用表达式访问者在事后应用它,但只是特殊情况null更容易。所以:

var query = // some core query
if(s == null) { query = query.Where(x => x.Foo == null); }
else { query = query.Where(x => x.Foo == s); }

你试过DBNull.Value吗? 这是.net的数据库等同于null。

最新更新