Ian*_*vis 11 .net c# linq-to-entities linq-to-sql
我有一个名为"test"的表,它只有1列,"NullableInt"(可为空的int类型)
记录是:1,2,null
int? nullableInt = null;
var t = db.tests.Where(x => x.NullableInt == null).ToList(); // returns 1 record
var t2 = db.tests.Where(x => x.NullableInt == nullableInt).ToList(); // returns 0 records
Run Code Online (Sandbox Code Playgroud)
出于某种原因,t2返回0条记录,即使它使用"nullableInt"变量,其值为null,就像t,它与"null"进行比较
任何帮助将不胜感激!
是的 - 这是LINQ-to-SQL/Entity Framework中的一个错误. IS NULL
只有在将null硬编码到查询中时才会生成查询,而不是当前为null的变量.
第二个查询将生成
SELECT .......
WHERE NullableInt == @someParam
WHERE @someParam is null.
Run Code Online (Sandbox Code Playgroud)
其中第一个将IS NULL
在WHERE
子句中生成相应的.
如果你正在使用LINQ-to-SQL,你可以将你的查询记录到Console.Out以便自己查看,如果你正在使用EF,那么ToTraceString()应该显示相同的信息(或SQL Server探查器)
查询可以这样构建:
var q = db.tests;
if(nullableInt.HasValue)
{
q = q.Where(x => x.NullableInt == nullableInt.Value);
}
else
{
q = q.Where(x => x.NullableInt == null);
}
var t2 = q.ToList();
Run Code Online (Sandbox Code Playgroud)