我正在尝试用一个计数做一个非常简单的组,但遇到问题,因为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)会给出相同的查询,因此这不是问题。
非常感谢!