【发布时间】:2016-06-21 04:40:47
【问题描述】:
我有一个如下所示的 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);
其中justTheDate、minDate、maxDate(日期时间)和externalObject.CalculationID(字符串)都是作用域中的变量。
当我枚举它时(使用 something.Select(x=>x.Last()).ToList() 之类的东西)大约需要 15 秒。有很多数据,但与生产中的预期数据并不接近。
无论如何让这个查询更快?
【问题讨论】:
-
说到 EF,LINQ 不是问题——它只是一种枚举语法。问题是数据库。你那里有多少记录?考虑将索引应用于您的表。
-
在其上运行
.ToString()以查看它生成的查询。您也许可以将其编入索引。 -
听起来像是数据库的索引问题。
-
还有你的 Calculations 模型有多大,如果你不想获取这个模型的所有属性,你可以使用 select 语句只获取你感兴趣的属性
-
在你的作业中使用 .ToList()。否则某些东西是 IQueryable
并且您的 Select() 调用将导致多次往返数据库(因为 IQueryable 不保存结果,只是应该如何构建查询的信息)
标签: c# entity-framework linq