2011-06-22 32 views
0

我有一個LINQ到SQL查詢,只需連接三個表然後執行分組。這裏是查詢爲Linq-to-Sql分組生成大量的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

(我假設mktActualSales是你的表,你將錯過在DataContext中的問題。)

如果這是你的表,你應該看看在你的DataContext LoadOptions。有了這個,你可以加載一些相關的數據,這可能會阻止重複查詢。

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

如果它不是一個表,對你如何填充mktActualSales但是從你的問題來看我認爲它是一個表看看。