如果比较可以为空的数据,Linq什么也不返回

时间:2016-07-28 10:39:18

标签: sql sql-server vb.net linq

我在数据库中有一个列,其值为NULL。我正在linq中读取此值以获得结果,但linq不会返回任何结果。 我的linq看起来像

dim result= (from t in <tableName> where i.id=Pid)

Pid作为Nothing传递,我的DB将此id值作为NULL组成,因此这个linq应返回一些结果但不返回。为什么?

2 个答案:

答案 0 :(得分:0)

据我所知,无法使用比较运算符测试NULL值,例如SQL中的=, <, or <>。我们将不得不使用IS NULL and IS NOT NULL运算符。

您可以使用以下主题语言if statement执行您想要的操作:

if(pid!=null)
{
     dim result= (from t in <tableName> where i.id=Pid)
}
else
{
     dim result= (from t in <tableName> where i.id IS NULL)
}

答案 1 :(得分:0)

此查询将使用以下where子句转换为SQL:

WHERE [t1].[Id] = @p1

这里的问题是SQL中的null比较语义返回null,这不是真的,并且行被过滤了。

相反,你想要这个where子句:

WHERE [t1].[Id] is null

您可以使用其他查询获得。

dim result= (from t in <tableName> where i.id Is Nothing)