在int上使用ISNULL?在Linq的WHERE子句中查询

时间:2017-12-13 12:23:07

标签: c# linq

我一直试图找到解决方案,并且我已经看到了很多关于如何在ISNULL语句中使用SELECT功能的示例,或者如何检查a中的空值WHERE子句返回一个布尔值。

但是,通过搜索如何返回整数,我无法找到任何示例,具体取决于值是否为空。

我试图从SQL复制一个简单的功能:

SELECT * 
FROM Projects 
WHERE ISNULL(projects.ParentID , 0) = @Value

我根据我在搜索过程中看到SELECT子句或ISNULL子句中WHERE布尔操作的建议尝试了一些不同的方法:

var output = (from p in ctx.Projects...

1

...
where ( (p.ParentID == null) ? p.ParentID == 0 : p.ParentID == p.ParentID) == @var 

2

...
where p.ParentID ?? 0 == @var

3

...
where p.ParentID ? 0 == @var

4

...
where ((p.ParentID == null) ? true : 0 ) == @var

5

...
where 
((p.ParentID == null) ? 0 ) == @var

...select p

任何帮助都会受到赞赏,我不知道为什么Linq与SQL相比这么复杂。

2 个答案:

答案 0 :(得分:2)

为什么不简单:

var q = ctx.Projects.Where(p => p.ParentId == parentId);

如果parentIdintint?,则可行。

如果将null视为0,则应该起作用:

 var q = ctx.Projects.Where(p => (p.ParentId ?? 0) == parentId);

答案 1 :(得分:2)

怎么样

where (p.ParentId == value) || (value == 0 && p.ParentId == null)

因为值== 0已经被称为生成查询的时间,所以您将获得一些性能。