我正在使用LINQ到实体框架(EF)来获取我的表中记录的数量,使用以下代码:
using (var db = new StackOverflowEntities())
{
var empLevelCount = db.employeeLevels.Count();
}
我使用SQL Server Profiler捕获了EF向数据库发出的查询。我得到了以下查询:
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[employeeLevels] AS [Extent1]
) AS [GroupBy1]
即使是对于LongCount
扩展方法,该查询仍然保持完全相同,除了COUNT
SQL函数在EF创建的SQL查询中被COUNT_BIG
替换。由LINQ到EF提供程序创建的查询看起来非常奇怪。为什么它不像下面简单地执行以返回标量计数值?
SELECT
COUNT(1) AS [A1]
FROM [dbo].[employeeLevels] AS [Extent1]
如果有人能帮我理解EF内部正在处理的其他物流问题,这将非常有帮助,这就是为什么LINQ to EF提供程序会创建这样的查询?看起来EF也在尝试通过一些常见算法处理一些其他用例,从而导致类似上面所创建的通用查询。
SELECT COUNT(*) FROM [employeeLevels] AS [t]
:) - Ivan Stoev