2013-10-21 8 views
5

Ich habe diese Zeile CodeDie beste Methode, Count() in LINQ zu verwenden?

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

dem ReSharper mich

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

Warum zu ändern aufgefordert? Wer klärt mich auf, was die Vorteile des Änderns sind?

+8

Nun, offensichtliche Antwort wäre: Es ist ein Funktionsaufruf statt zwei und es ist kürzer. – Zruty

+0

Das generierte SQL ist gleich. – Dannydust

Antwort

5

Ich würde nicht sagen, die zweite, wenn immer schlimmer. Es hängt vom Kontext ab.

für LINQ to Objects ist es besser, die zweite zu verwenden, da es nehme schneller zu sein. Ich habe das nicht getestet, das ist wirklich nur meine Vermutung.

Seien Sie jedoch vorsichtig mit Änderungen wie dieser, weil sie nicht immer gleichwertig sind. Z.B. Wenn Sie LINQ to Entities verwenden, würde der zweite überhaupt nicht funktionieren! Das liegt daran, Count Überladung mit Prädikat ist nicht supported by LINQ to Entities.

2

Ich denke, es hängt davon ab, wie Sie es verwenden möchten. Lassen Sie uns sagen Sie eine Frage haben:

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

Wenn Sie mit verzögerter Ausführung im Kopf schreiben, dann würde ich Anfragen lieber zuerst schriftlich und entsprechend verwenden (und nicht gierige Operatoren wie Count() verwendet wird), aber wie ich schon sagte, hängt nach dem Szenario.