Я провел небольшое исследование по этому вопросу, и лучшее, что я нашел на данный момент, это использование 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)
};
Это дает мне месяцы в формате ГГГГ-ММ вместе с общей суммой и средней суммой. Однако каждый раз это занимает несколько минут.
Мой другой обходной путь - выполнить запрос на обновление в SQL, поэтому у меня есть поле YYYYMM, с помощью которого можно сгруппировать исходно. Смена БД, однако, не является легким решением, поэтому любые предложения будут оценены.
В потоке, в котором я нашел приведенную выше идею кода (/1373027/gruppirovka-po-nedelyam-v-linq-to-entities) упоминается «ожидание до .NET 4.0». Есть ли что-нибудь недавно появившееся, что поможет в этой ситуации?