2012-01-05 2 views
0

Каков наиболее эффективный способ подсчета элементов на таблице с использованием EF 4.1?Функция EF 4 Count()

this.context.MyTable.Count(x.idTenant == 5); 

или

this.context.MyTable.Where(x.idTenant == 5).Count(); 

Любой другой способ подсчета объектов в таблице, является его более производительным?

+0

я не знаю достаточно, чтобы ответить, но ваши два пример бы должен, вероятно, создать такое же дерево выражения. – Joe

+0

http://stackoverflow.com/questions/890381/how-to-count-rows-withinentityframework-without-loading-contents –

+0

@JoeTuskan, Reshaper предложил первый, но я не знаю, просто ли это другой способ написать это или есть усиление производительности. – Romias

ответ

1

По выходу из Linq, выражения равны в SQL они создают:

SELECT COUNT(*) AS [value] 
FROM [MyTable] AS [t0] 
WHERE [t0].[idTenant] = @p0 
1

Попытка это 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 ,

+0

+1 Я бы сказал, что первый будет работать * чуть быстрее с одним вызовом метода. –

+0

Или это оптимизировано – Joe