Огромный SQL, сгенерированный для группировки Linq-to-Sql - PullRequest
0 голосов
/ 22 июня 2011

У меня есть один запрос 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 для присоединенного запроса?

1 Ответ

1 голос
/ 22 июня 2011

(я предполагаю, что mktActualSales - ваша таблица, и вы пропустили ввод Datacontext в вопрос.)

Если это ваша таблица, вам следует взглянуть на LoadOptions в вашем DataContext.При этом вы можете загружать некоторые связанные данные, и это может предотвратить повторяющиеся запросы.

http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx

Если это не таблица, посмотрите, как вы заполняете mktActualSales, ноСудя по вашему вопросу, я предполагаю, что это таблица.

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