使用EF 4.1计算表上项目的最高效方法是什么?
this.context.MyTable.Count(x.idTenant == 5);
或
this.context.MyTable.Where(x.idTenant == 5).Count();
还有其他方法可以计数表中的实体吗?它更具性能吗?
根据Linq的输出,它们生成的SQL中的表达式是相等的:
SELECT COUNT(*) AS [value]
FROM [MyTable] AS [t0]
WHERE [t0].[idTenant] = @p0
在LINQPad中尝试此操作会显示生成的sql相同:
var r1 = Users.Count(u => u.JurisdictionId == 5).Dump();
var r2 = Users.Where(u => u.JurisdictionId == 5).Count().Dump();
和生成的sql:
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [System].[Users] AS [Extent1]
WHERE 5 = [Extent1].[JurisdictionId]
) AS [GroupBy1]
GO
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [System].[Users] AS [Extent1]
WHERE 5 = [Extent1].[JurisdictionId]
) AS [GroupBy1]
这是使用EF 4.2,但应与4.1中的相同。