IQueryableT vs IEnumerableT mit Lambda, welche zu wählen?

8

Ich trainiere mehr und mehr mit Lambda, aber ich finde nicht heraus, warum manchmal .AsQueryable(); verwendet wird, die IQueryable verwenden und manchmal das .AsQueryable(); weglässt und IEnumerable verwendet.

Ich habe die MSDN gelesen, aber ich sehe nicht, wie man einen Ausdrucksbaum ausführt. ist ein Vorteil gegenüber nicht.

Jeder kann es mir erklären?

    
Patrick Desjardins 29.10.2008, 00:12
quelle

3 Antworten

6

IQueryable implementiert IEnumerable, also können Sie mit IQueryable alles tun, was Sie mit IEnumerable tun können. IQueryables behandelt die Konvertierung eines Lambda-Ausdrucks in eine Abfrage in der zugrunde liegenden Datenquelle - dies kann eine SQL-Datenbank oder ein Objektsatz sein.

Grundsätzlich sollten Sie sich normalerweise nicht auf die eine oder andere Weise kümmern müssen, wenn es sich um ein IQueryable oder ein IEnumerable handelt.

    
Andrew Theken 29.10.2008, 00:20
quelle
6

Als Benutzer sollten Sie sich im Allgemeinen nicht darum kümmern, es geht wirklich um den Implementierer der Datenquelle. Wenn die Datenanbieter IEnumerable nur implementieren, führen Sie im Grunde LINQ zur Ausführung von Objekten aus, d. H. Es befindet sich in der Speicheroperation für Auflistungen. IQueryable bietet der Datenquelle die Möglichkeit, die Ausdrucksbaumstruktur in eine alternative Darstellung zur Ausführung zu übersetzen, sobald der Ausdruck ausgeführt wird (normalerweise durch Aufzählung), was Linq2Sql, Linq2Xml und Linq2Entities tun.

Die einzige Zeit, die ich für den Endbenutzer sehen kann, ist, ob sie den Ausdrucksbaum untersuchen möchte, der ausgeführt wird, da IQueryable den Ausdruck freigibt. Eine andere Verwendung könnte die Überprüfung des Anbieters sein. Beide Szenarien sollten jedoch für Implementierungen anderer Abfrageanbieter reserviert sein und den Ausdruck transformieren. Der Punkt von Linq ist, dass Sie sich nicht um die Implementierung der zu verwendenden Ausdrucksausführung kümmern sollten.

    
Arne Claassen 03.11.2008 17:30
quelle
1

Ich stimme Arne Claassen zu, es gibt Fälle, in denen Sie über die zugrundeliegenden Daten aus den Datenquellen nachdenken müssen. Sehen Sie sich zum Beispiel den Blogeintrag an zeigt, wie das von IEnumerable und IQueryable generierte SQL in bestimmten Szenarien unterschiedlich ist.

    
Shreedhar Kotekar 20.05.2009 13:43
quelle

Tags und Links