2013-10-21 11 views
5

Ho questa riga di codiceIl modo migliore per usare Count() in LINQ?

var count = materials.Where(i => i.MaterialType1 == MaterialType.Major).Count(); 

che ReSharper mi spinge a cambiare per

var count = materials.Count(i => i.MateriakType1 == MaterialType.Major); 

Perché? Qualcuno mi illumina su quali sono i benefici del cambiamento?

+8

Bene, la risposta ovvia sarebbe: è una chiamata di funzione anziché due ed è più breve. – Zruty

+0

L'SQL generato è uguale. – Dannydust

risposta

5

Non direi il secondo se sempre peggio. Dipende dal contesto.

Per LINQ to Objects è preferibile utilizzare il secondo, perché è supporre che sia più veloce. Non l'ho provato, quindi è solo una mia supposizione.

Tuttavia, fare attenzione a modifiche come questa, perché non sono sempre equivalenti. Per esempio. se hai usato LINQ su Entità, il secondo non funzionerebbe affatto! Questo perché il sovraccarico Count con predicato non è supported by LINQ to Entities.

2

Penso che dipenda da come lo si desidera utilizzare. Diciamo che avere una query:

var query=materials.Where(i => i.MaterialType1 == MaterialType.Major); 
var query2=query. ... sub query 
var result=query. ... some operation 
var result=query.Count() ; 

Se si scrive con esecuzione differita in mente, allora io preferirei scrivere query prima e utilizzarlo di conseguenza (invece di utilizzare gli operatori avide come Count()) ma come ho detto dipende sullo scenario.

Problemi correlati