我期待在LINQ下的SQL語句實現。我不確定是否可能?有人能就此提出建議嗎?我如何從LINQ實現SQL透視語句
SELECT *
FROM (
SELECT CONVERT(VARCHAR, (DATEADD(WEEK, DATEDIFF(WEEK, 0, S.SampleDrawn), 0)), 101) [Date], [Range] =
CASE
WHEN ProbBacteremia >= 0 AND ProbBacteremia < 0.50 THEN 'Low'
WHEN ProbBacteremia >= 0.50 AND ProbBacteremia < 0.75 THEN 'Med'
ELSE 'High'
END
FROM Result.Calculation C INNER JOIN Data.SampleSet S ON C.SampleSetID = S.ID WHERE S.SampleDrawn >= DATEADD(WEEK,-1,GETDATE())) o
PIVOT
(
COUNT(o.[Range])
FOR [Range] IN (
[Low], [Med], [High])
) pt
ORDER BY [Date]
上述查詢的結果將是如下
Date Low Med High 09/04/2017 370 174 175 09/11/2017 764 352 389 09/18/2017 759 384 360 09/25/2017 765 385 404 10/02/2017 115 48 56
需要注意的是,上面的日期按星期分組。 IE瀏覽器。 09/04,09/11,09/18等。我做了很多研究,但是我發現只按週數分組。
這是就我能想出的LINQ,它會返回給我下面的結果集。在obver LINQ的
data = (from a in context.Calculations
where a.SampleSet.SampleDrawn >= dtStart && (isDeptFilter || a.SampleSet.Department == location)
group a by new { Text = RangeProvider(a.ProbBacteremia * 100, riskCats), Date = a.SampleSet.SampleDrawn.Date } into groupedData
orderby groupedData.Key.Date ascending
select new { Value = groupedData.Count(), Text = groupedData.Key.Text, Date = groupedData.Key.Date.ToShortDateString() }).ToList();
public static string RangeProvider(int value)
{
if (value > 0 && value <= 25)
{ return "Low"; }
if (value > 25 && value <= 75)
{ return "Medium"; }
if (value > 75 && value <= 90)
{ return "High"; }
else
{ return "Very High"; }
}
結果集是
Date Text Value 09/04/2017 Low 65 09/04/2017 Med 80 09/04/2017 High 40 09/05/2017 Low 30 10/05/2017 Med 50 10/05/2017 High 44
希望這解釋了什麼是我想要的目的。請有人可以幫助我嗎?
沒有在LINQ本土支點,但你可以創建自己的https://code.msdn.microsoft.com/windowsdesktop/CSEFPivotOperation-cbdd79db –
這是那些反覆出現的問題,從來沒有得到一個滿意的一個回答因爲沒有。 –
好吧,我明白了。有人知道如何按上述結果進行分組嗎?使用LINQ。 –