2016-06-21 92 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的引用。 –