У меня есть набор запросов, которые я не могу понять, как оптимизировать. Я знаю, что это возможно, но мне пришлось разбить запросы на две части.
По сути, у меня есть список вех за предыдущий год, и я хочу создать перечисляемое число, равное единице, для каждого месяца с начала текущего года. Линк выше сначала создает множество перечислений dobule. Затем я должен сгруппировать его и суммировать. Я хотел бы сделать это в одном операторе linq, так как это просто трата памяти и процессорного времени.
Может кто-нибудь помочь, пожалуйста.
var prevArrMilestones = arrMilestones.Where(m => m.ExpectedInvoiceDate.Year == thisYear - 1);
var endOfYear = new DateTime(thisYear - 1, 12, 31);
var beginOfYear = new DateTime(thisYear, 1, 1);
var a=
from o in prevArrMilestones
select
from p in GetMonths(beginOfYear, new DateTime(thisYear, o.ExpectedInvoiceDate.Month, o.ExpectedInvoiceDate.Day))
let daysInYear = (thisYear % 4 == 0 ? 366 : 365)
let amountPerDay = o.Amount / daysInYear
let daysForMonth = p == o.ExpectedInvoiceDate.Month ? o.ExpectedInvoiceDate.Day : DateTime.DaysInMonth(thisYear, p)
select new ArrItem
{
ArrForMonth = daysForMonth * amountPerDay,
Month = p,
DaysInMonth = daysForMonth
};
var b =
from o in a
from p in o
group p by new { p.Month }
into q
select new ArrItem
{
Month = q.Key.Month,
ArrForMonth = q.Sum(m=>m.ArrForMonth)
};