2016-06-21 77 views
2

我有一個LINQ,看起來像這樣:很慢LINQ與在聲明

var something = db.Calculations 
      .Where(x => x.CalculationDate.Date == justTheDate 
      && x.CalculationID == externalObject.CalculationID 
      && x.CalculationDate >= minDate 
      && x.CalculationDate <= maxDate).GroupBy(x => 
      (int)x.CalculationDate.TimeOfDay.TotalMinutes); 

其中justTheDateminDatemaxDate(日期時間)和externalObject.CalculationID(串)的範圍內發現的所有變量。

當我列舉它(使用類似something.Select(x=>x.Last()).ToList())大約需要15秒。有很多數據,但並不接近預期的產量。

無論如何讓這個查詢更快?

+0

談到EF,LINQ不是一個問題 - 它只是一個枚舉語法。問題是數據庫。你有多少條記錄?考慮將索引應用於表格。 –

+3

對其運行'.ToString()'來查看它生成的查詢。您可能可以將其編入索引。 –

+0

聽起來像數據庫上的索引問題。 – prospector

回答

4

您可以使用此代碼來獲取生成的SQL查詢:

var objectQuery = something as System.Data.Objects.ObjectQuery; 
string strQuery = objectQuery.ToTraceString(); 

GET查詢後,就可以在數據庫直接執行它。如果它再次變慢,您應該爲where子句列創建適當的索引。

+0

感謝您的這一點,但我忘了補充說這是針對UWP的。我似乎沒有System.Data.Objects.ObjectQuery – Tyress

+0

@Tyress您需要添加對.NET程序集System.Data.Entity.dll的引用。 –