Wir haben dieses Array in LINQ.
%Vor%und dieser Code gibt 0 zurück.
%Vor%und andere Rückkehr 1.
%Vor%Warum passiert es? Was ist der Unterschied zwischen Liste und Ienumerable?
Die Methode Where
führt Ihre Abfrage nicht aus - sie erstellt nur eine Abfrage, die dann ausgeführt wird, wenn die Daten angefordert werden. Dies wird als verzögerte Ausführung bezeichnet. In Ihrem ersten Snippet wird der Filter nur angewendet, wenn Count()
aufgerufen wird - also , nachdem das Element red
entfernt wurde.
Im zweiten Snippet erzwingt Ihr Aufruf von ToList()
, dass die Abfrage sofort ausgeführt wird, um eine neue Liste zu erstellen. Dies ist dann völlig unabhängig von der ursprünglichen Liste - das Entfernen eines Elements aus der ursprünglichen Liste hat keinen Einfluss auf die Ergebnisse.
Dies ist nicht abhängig vom Deklarationstyp von q3
- der wichtige Unterschied ist nur der Aufruf von ToList()
. Wenn Sie also das zweite Snippet zu:
... Sie werden den gleichen Effekt sehen. Die Abfrage wird ausgeführt, bevor das Objekt entfernt wird. Zu diesem Zeitpunkt ist die ursprüngliche Liste für den Inhalt von q3
nicht relevant.
Weitere Einzelheiten zu LINQ finden Sie in meiner Edulinq-Blogserie .
IEnumerable
ist eine Schnittstelle und eine Liste ist eine Klasse.
Und IEnumerable
kann nur die Werte speichern, aber Sie können sie nicht bearbeiten, wie Werte hinzufügen oder entfernen.
Auch wenn Sie .ToList()
ausführen, wird die Abfrage für die Datenbank ausgeführt, wenn Sie Elemente aus der Datenbank auswählen.
Tags und Links c# linq list ienumerable