| 

.NET C# Java Javascript Exception

3
Die sprachintegrierten Abfragen arbeiten mit Methoden, die meist Sequenzen verwenden. Diese Objekte implementieren entweder die IEnumerable(Of T)-Schnittstelle oder die IQueryable(Of T)-Schnittstelle. Mir wird der Unterschied nicht klar, weil in beiden Fällen die Methode GetEnumerator() angeboten wird. Wer bringt Lichts ins Dunkel?
News:
30.11.2011
Reiner D. 61 1 3
2 Antworten
1
Zunächst: GetEnumerator() ist in beiden Schnittstellen vorhanden, weil IQueryable<T> von IEnumerable<T> erbt.

Mit IEnumerable kannst Du gut mit einer Datenstruktur im Speicher arbeiten. Die einzelnen Erweiterungsmethoden arbeiten im Prinzip wie Filter - das Ergebnis der ersten ist der Input für die zweite usw. Mit einer externen Datenquelle will man so normalerweise nicht arbeiten - es wäre ineffizient, eine ganze Tabelle in den Speicher zu laden und als IEnumerable zu repräsentieren, um dann anschließend und auf den .NET-Objekten eine Where-Bedingung anzuwenden. Deshalb arbeiten Objekte, die IQueryable implementieren, so, dass sie erst mal einen Ausdruck zusammenbauen, der dann am Ende als ganzes auf die Datenquelle angewendet wird. Der Witz bei IQueryable ist also vor allem die Expression-Eigenschaft und die unterschiedliche Art der Ausführung. Versuche mal - in Gedanken, auf dem Papier oder auch in Code - die Aufgabe zu lösen, aus

dataSource.Where(x => x.Name = "Müller").Select(x => x.Vorname);


den SQL-Befehl

select vorname from theTable where name = "Müller"


zu generieren. Du wirst merken, dass das allein mit IEnumerable schwierig wird, mit IQueryable aber ganz gut geht.
30.11.2011
Matthias Hlawatsch 13,2k 4 9
0

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH