0

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

任何指针都会有所帮助。

4

2 回答 2

4

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

where x.Foo == null

对比

where x.Foo == s

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

WHERE [x].[Foo] = @p3

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

我建议如果您正在测试参数值可能在哪里null,特例它并使用C# 中的文字对查询进行编码。 null我确实有一些代码可以使用表达式访问器来在事后应用这个,但是对于 special-case 来说更容易null。所以:

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 吗?那是 .net 的 DB 相当于 null。

于 2012-10-03T19:48:51.247 回答