我有我試圖轉換成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