将null参数传递给LINQ where子句

Jef*_*eff 1 c# linq entity-framework

我有一个表,其中一些项可能为空.我可以通过使用如下查询轻松查询:

db.SomeTable.Where(s => s.SomeCol == null)
Run Code Online (Sandbox Code Playgroud)

很简单,但这不起作用(没有结果.我怀疑它正在搜索空字符串;"")当使用碰巧为null的变量时,如下所示:

string variable = null;
db.SomeTable.Where(s => s.SomeCol == variable)
Run Code Online (Sandbox Code Playgroud)

我必须做一些特别的事情才能让它发挥作用吗?

Rob*_*ick 7

使用LinqPad你可以看到差异.

前者创建一个查询,如:

select ...
from SomeTable as t0
where t0.SomeCol IS NULL
Run Code Online (Sandbox Code Playgroud)

而后者是

select ...
from SomeTable as t0
where t0.SomeCol = @p0
Run Code Online (Sandbox Code Playgroud)

相反,您可以在测试中使用object.Equals.例如,

string test = null;
var q = from c in SomeTable where object.Equals(c.SomeCol, test) select c;
Run Code Online (Sandbox Code Playgroud)

这将根据条件中使用的变量的值生成适当的where子句.

  • 如果确实如此,那么LINQ to SQL(或EF)的抽象漏洞就是另一种情况.遗憾的是,有这么多案例,基本上使整个抽象有问题. (2认同)