我对此做了一些研究,迄今为止发现的最好的方法是在整个数据集上使用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