Deferred Query Evaluation – Verzögerte Auswertung von LINQ Abfragen

Nachdem er als Entwurf ca. 15 Monate vor sich hin geschlummert hat, soll dieser Eintrag nun doch noch mal veröffentlicht werden🙂

Ein interessanter Aspekt bei der Definition von LINQ-Abfragen ist der tatsächliche Zeitpunkt der Ausführung. In der Regel ist dies nicht bei der Query Definition, sondern beim Zugriff auf das Ergebnis der Abfrage mit „foreach“ oder über „GetEnumerator“ in Kombination mit „MoveNext“.

Folgender Code

var strMeth = from m in typeof(string).GetMethods()
orderby m.name
select new { m.Name, m.IsStatic };

definiert also nur eine Abfrage, ohne dass diese tatsächlich ausgeführt wird.

Falls erforderlich, dann lässt sich aber die sofortige Ausführung durch eine kleine Änderung erzwingen:

var strMeth = (from m in typeof(string).GetMethods()
orderby m.name
select new { m.Name, m.IsStatic }).ToList();

Durch das Ergänzen von „.ToList()“ erreicht man also die sofortige Auswertung einer LINQ Abfrage. Gleiches gilt übrigens auch für „.ToArray()“

Bis bald
Kostja

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: