2012-11-22 12 views
7

Sto lavorando con Entity Framework 4.1 e C#.Confronto del rendimento delle query generate per Any() vs Count() in Entity Framework 4.1

Qual è il più adatto per le migliori prestazioni?

Se sì - perché? (eventuali collegamenti per letture aggiuntive)?

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

O

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

'Any' è più leggibile ed è normalmente più efficiente, in quanto può utilizzare' EXISTS'. Ma in Linq-To-Entities si dovrebbe guardare lo sql generato. [A volte] (http://stackoverflow.com/a/11042691/284240) "Conteggio" sembra essere più veloce. Per Linq-To-Objects [sempre] (http://stackoverflow.com/a/305156/284240) usa 'Qualsiasi'. –

+0

Grazie per i link utili. – Sampath

risposta

8

Conte Credo causerà tutti i record di essere iterato sopra, considerando che ogni si fermerà al primo che trova.

EDIT: Appena trovato un ottimo post sul conteggio vs qualsiasi take a look here

+0

Il post che si collega è su Ienumerable ma nelle risposte si parla di Iqueriable e EF –

+0

In effetti, in generale quando si usa linq su oggetti Any è quasi sempre più veloce, tuttavia quando si usa Linq su entità Count()> 0 può essere più veloce, puramente sembra a causa del spesso complicato SQL generato da EF. –

Problemi correlati