2012-01-05 5 views
0

EF 4.1を使用してテーブル上のアイテムを数える最も効果的な方法は何ですか?EF 4 Count()options performance

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

または

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

それはよりパフォーマンスであること、テーブル内のエンティティをカウントするために、他の方法? LINQPadでこれをしようと

+0

私は答えることが十分に知りませんが、あなたの2つの例は、おそらく同じ式ツリーを作成する必要があります。 – Joe

+0

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

+0

@JoeTuskan、Reshaperが最初のものを提案しましたが、それが正しかったかどうかわかりませんそれを書く別の方法やパフォーマンスの向上があります。 – Romias

答えて

1

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

が同じになるように生成された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で同じでなければなりません。 LINQのからの出力によると、式は、彼らが発生するSQLが同じである

+0

+1私は、最初の方がメソッド呼出しが少なくてもやや早く実行すると言っていると賭けています。 –

+0

または最適化されています – Joe