我有我试图转换成Linq的无法通过实体框架在集团选择
SELECT
DATEPART(yyyy, ce.DueDate) AS year,
DATEPART(mm, ce.DueDate) AS Month,
COUNT(CASE WHEN rt.Code = 'Pass' THEN 1 ELSE NULL END) AS NumPass,
COUNT(CASE WHEN rt.Code = 'Fail' THEN 1 ELSE NULL END) AS NumFail
FROM
ControlEvent ce
INNER JOIN
ProcessEvent pe ON pe.ControlEventId = ce.Id
INNER JOIN
ResultType rt ON pe.ResultTypeId = rt.Id
WHERE
DATEDIFF(dd,ce.DueDate,GETDATE()) <= 0
AND DATEDIFF(dd,ce.DueDate,DATEADD(mm, 3, GETDATE())) >= 0
AND pe.ProcessId = 1040
GROUP BY
DATEPART(yyyy, ce.DueDate), DATEPART(mm, ce.DueDate)
ORDER BY
DATEPART(yyyy, ce.DueDate), DATEPART(mm, ce.DueDate)
我已经这样做了,直到如今
var result =
(from ce in ControlEvents
join pe in ProcessEvents on ce.Id equals pe.ControlEventId
join rt in ResultTypes on pe.ResultTypeId equals rt.Id into resultType
where ce.DueDate >= startDate &&
ce.DueDate <= endDate &&
pe.ProcessId == 1048
orderby ce.DueDate.Value.Year, ce.DueDate.Value.Month
group ce by new {
ce.DueDate.Value.Year,
ce.DueDate.Value.Month,
} into g
select new {
g.Key.Year,
g.Key.Month,
}
).ToList();
这个SQL查询我的问题是如何能我把我的SQL查询中的case语句带到linq Select中。谢谢。
什么,如果我想按年份,然后按周? Linq我怎么能做到这一点? – Ahsan
没有标准的规范函数。如果您仅以SqlServer为目标,则可以使用[SqlFunctions.DatePart](https://msdn.microsoft.com/zh-cn/library/dd487171(v = vs.110).aspx) –
做了一些更多的测试,结果发现成为sum语句正在带来ControlEvent.ResultTypes.Pass或Fail的总和,而我对ProcessEvent.ResultType.Pass或Fail感兴趣。对此有何想法? – Ahsan