2012-11-22 60 views
7

我正在使用Entity Framework 4.1和C#。比較實體框架4.1中的Any()與Count()生成查詢的性能

哪一種最適合最佳性能?

如果是這樣 - 爲什麼? (有更多閱讀的鏈接)?

bool isBoarding = invoice.Allocations.Where(a => a.Service.Key == "boarding").Count() > 0; 

OR

bool isBoarding = invoice.Allocations.Any(a => a.Service.Key == "boarding"); 
+0

'Any'是更具可讀性和通常更有效,因爲它可以使用'EXISTS'。但在Linq-To-Entities中,您應該查看生成的sql。 [有時](http://stackoverflow.com/a/11042691/284240)'計數'似乎更快。對於Linq-To-Objects [always](http://stackoverflow.com/a/305156/284240)使用'Any'。 –

+0

感謝您的有用鏈接。 – Sampath

回答

8

伯爵我相信這將導致所有記錄進行遍歷,而任何將它發現的第一站。

編輯:剛剛發現約計數一個很好的職位VS任何take a look here

+0

您鏈接的帖子是關於Ienumerable的,但是在回覆中它討論了Iqueriable和EF –

+0

的確如此,一般情況下,當使用linq到對象時任何幾乎總是更快,但是當使用Linq實體時Count()> 0可以更快,看起來是因爲EF生成的經常令人費解的SQL。 –