Я немного поработал над этим, и самое лучшее, что я нашел до сих пор, - использовать 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/info/1059737/group-by-weeks-in-linq-to -entities) упоминает "до тех пор, пока .NET 4.0". Что-то недавно появилось, что помогает в этой ситуации?