【发布时间】:2019-09-30 06:58:42
【问题描述】:
我正在尝试在 LINQ 中复制一个简单的 COUNT / GROUP BY。它可以在 SQL 中运行,但我的 LINQ 不能正常工作。我不想计算空值,但我的 LINQ 语句出于某种原因这样做。
这是我的 SQL:
SELECT Count(ID),Year(DateCompleted)
FROM dbo.Requests
WHERE ISNULL(DateCompleted,'') <> ''
group by year(datecompleted)
返回
7 2015
102 2016
这是我的 LINQ - null。
var test = from r in Model.Requests
where r.DateCompleted != null
group r by r.DateCompleted.Year into grp
select new ChartSimple() { K = grp.Key.ToString(), V = grp.Count(x => x.DateCompleted != null) };
返回
7 2015
102 2016
10 1
我错过了什么?
【问题讨论】:
-
可以发
Request.DateCompleted的声明吗?它应该可以为空。 -
如果将
WHERE ISNULL(DateCompleted,'') <> ''更改为WHERE DateCompleted IS NOT NULL,SQL 结果会怎样? -
在您的 sql 中,您还检查它是否不是空字符串
<> ''您不要在 linq 表达式中这样做。 -
等一下。 DateCompleted 是什么类型?您如何将其与 null 进行比较,同时还可以直接访问 Year?如果 DateTime 可以为空,那应该是不可能的。
-
DateCompleted != null对于DateTime类型将始终为真,这显然是DateCompleted属性的类型。