Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将空参数传递到LINQ where子句_C#_Linq_Entity Framework - Fatal编程技术网

C# 将空参数传递到LINQ where子句

C# 将空参数传递到LINQ where子句,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个表,其中一些项可能为空。然后,我可以使用如下查询轻松地进行查询: db.SomeTable.Where(s => s.SomeCol == null) 很简单,但在使用正好为null的变量时,这不起作用(没有结果。我怀疑它正在搜索空字符串;“”),如下所示: string variable = null; db.SomeTable.Where(s => s.SomeCol == variable) 我必须做一些特殊的事情才能让它工作吗?使用LinqPad您可以看到区别 前

我有一个表,其中一些项可能为空。然后,我可以使用如下查询轻松地进行查询:

db.SomeTable.Where(s => s.SomeCol == null)
很简单,但在使用正好为null的变量时,这不起作用(没有结果。我怀疑它正在搜索空字符串;“”),如下所示:

string variable = null;
db.SomeTable.Where(s => s.SomeCol == variable)

我必须做一些特殊的事情才能让它工作吗?

使用LinqPad您可以看到区别

前者创建的查询类似于:

select ...
from SomeTable as t0
where t0.SomeCol IS NULL
而后者是

select ...
from SomeTable as t0
where t0.SomeCol = @p0
相反,您可以在测试中使用object.Equals。例如:

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

这将根据条件中使用的变量值生成相应的where子句。

使用LinqPad可以看到差异

前者创建的查询类似于:

select ...
from SomeTable as t0
where t0.SomeCol IS NULL
而后者是

select ...
from SomeTable as t0
where t0.SomeCol = @p0
相反,您可以在测试中使用object.Equals。例如:

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

这将根据条件中使用的变量值生成相应的where子句。

SomeCol的类型是什么?“不工作”是什么意思?您得到的是编译器错误还是异常?这是Linq2Sql的EF吗?如果EF,哪个版本?@Heather,我想他需要使用DBNull.Value。(更具体地说)@Heather我认为这可能无法编译。SomeCol的类型是什么?“不工作”是什么意思?您得到的是编译器错误还是异常?这是Linq2Sql的EF吗?如果EF,哪个版本?@Heather,我想他需要使用DBNull.Value。(更具体地说)@Heather我认为这很可能无法编译。如果真是这样,那么LINQ到SQL(或EF)的抽象又是一个漏洞。非常遗憾的是,有这么多的情况,基本上使整个抽象都成了问题。如果真是这样,那么LINQ到SQL(或EF)的抽象又是一个漏洞。真的很遗憾,有这么多的案例,基本上使整个抽象都成了问题。