对此我进行了一些研究,目前找到的最佳方案是在整个数据集上使用Asenumerable,这样过滤就会发生在LINQ to Objects中而不是数据库中。 我正在使用最新的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字段可以本地分组。但是更改数据库不是一个简单的解决方案,因此任何建议将不胜感激。
我在以下线程(https://dev59.com/i3NA5IYBdhLWcg3wL6sc)中找到了上述代码想法,其中提到“等到.NET 4.0”。是否有最近引入的任何内容可以帮助解决这个问题?