У меня есть один запрос Linq to SQL, который просто объединяет три таблицы, а затем выполняет группировку. Вот запрос:
(from s in mktActualSales
join p in sysPeriods on s.PeriodID equals p.PeriodID
join d in setupDesignations on s.PositionID equals d.DesignationID
group new { s, p } by new{d.Title,d.DesignationID} into temping
select
new
{
SPOPosition = temping.Key.Title,
SalesPeriods = temping.Select(x=>new {PeriodID = x.p.PeriodID, StartDate = x.p.StartDate, EndDate = x.p.EndDate, SaleTargetID = x.s.ActualSaleID, IsApproved = x.s.IsApproved}),
PositionID = temping.Key.DesignationID
}).Take(5)
Когда я проверяю SQL, сгенерированный (выполненный) этим запросом в LinqPad, есть 6 операторов SQL; первый выполняет объединение и группировку, а остальные запросы одинаковы, просто вызывая один и тот же запрос снова и снова с разными параметрами. Очевидно, что параметры - это значения, включенные в Ключ группы.
Это заставляет меня поверить, что для записи из 130 групп Linq попадет в базу данных 131 раз. Как я могу сохранить так много хитов в базу данных? Должен ли я выполнять группировку после загрузки данных в память, т.е. после вызова ToList для присоединенного запроса?