Оптимизация выписки EF для расчета начисления - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть набор запросов, которые я не могу понять, как оптимизировать. Я знаю, что это возможно, но мне пришлось разбить запросы на две части.

По сути, у меня есть список вех за предыдущий год, и я хочу создать перечисляемое число, равное единице, для каждого месяца с начала текущего года. Линк выше сначала создает множество перечислений 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)
        };

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...