LINQ / EF通过查询优化组计数

时间:2016-10-06 12:05:56

标签: c# sql entity-framework linq entity-framework-core

我正在尝试用一个计数做一个非常简单的组,但遇到问题,因为LINQ正在抛出一些非常可怕的SQL,这是超时的。我正在运行EF7和ASP NET 5。

这是我的代码 -

var counts = (from log in db.LogTable
              where proj.Contains(log.projId)
              group log by log.callTypeId into grp
              select new 
              { 
                  key = (from temp in callTypes where temp.Id == grp.Key select temp), 
                  count = grp.Count() 
              });

调用callTypes,LogTable包含超过1m的记录。

我甚至尝试删除where子句,更改密钥以从callTypes缓存中进行选择,只返回id,并添加orderby callTypeId,但这些都没有任何改进。

正在执行的查询如下 -

SELECT [log].[Id], [log].[callTypeId], [all other columns...] 
FROM [LogTable] AS [log] 
WHERE [log].[callTypeId] IN (1, 2, 3, 4, 5)

有没有人知道是否有办法可以强制执行“SELECT callTypeId,count(*)FROM LogTable WHERE ... GROUP BY callTypeId”来阻止它返回所有记录并对其进行分组申请方面好吗?或者我是否需要恢复到存储过程?

更新 -

如上所述,使用grp.Key替换(来自callTypes中的temp,其中temp.Id == grp.Key select temp)会给出相同的查询,因此这不是问题。

非常感谢!

0 个答案:

没有答案