我對此做了一些研究,迄今爲止發現的最好的方法是在整個數據集上使用Asenumerable,以便在linq中將對象過濾到對象中比在數據庫上。我正在使用最新的EF。實體框架:按月高效分組
我的工作(但很慢)代碼:
var trendData =
from d in ExpenseItemsViewableDirect.AsEnumerable()
group d by new {Period = d.Er_Approved_Date.Year.ToString() + "-" + d.Er_Approved_Date.Month.ToString("00") } into g
select new
{
Period = g.Key.Period,
Total = g.Sum(x => x.Item_Amount),
AveragePerTrans = Math.Round(g.Average(x => x.Item_Amount),2)
};
這給了我幾個月格式YYYY-MM,總金額及平均量一起。然而,每次都需要幾分鐘的時間。
我的另一個解決方法是在SQL中做一個更新查詢,所以我有一個YYYYMM字段來本地分組。更改數據庫不是一個簡單的修復,但所以任何建議,將不勝感激。
我發現上述代碼思想的線程(http://stackoverflow.com/questions/1059737/group-by-weeks-in-linq-to-entities)提到'等到.NET 4.0'。最近有沒有什麼可以幫助解決這種情況?
優秀,非常感謝阿德里安。我只做了一個快速測試,你的需要大約3.5秒,而原來的是5.2。長時間的延遲必須是我程序中的其他步驟。我感謝你的努力,你的代碼已經投入使用! – Glinkot 2012-03-27 10:49:12
這不應該是被接受的答案。這只是一個解決方法! @cryss的答案給出了一個完美的結果。 – 2015-11-26 14:45:24
優秀的解決方案,「按新增分組」非常強大,簡化了複雜的查詢。 – Jacob 2017-02-09 22:10:59