results
selbst ist nur eine Abfrage. Bis Sie beginnen, es zu durchlaufen (entweder explizit oder über einen Anruf wie Count()
), hat nichts überprüft, ob es Ergebnisse gibt oder nicht. Nur wenn du es aufzählst, wird alles passieren.
So könnten Sie tun:
foreach (int x in results)
{
Console.WriteLine("This won't happen");
}
Oder:
Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0
Jede dieser bewirkt, dass das Prädikat gegen jedes Element im Bereich ausgewertet werden ... aber bis dahin, es gewann Ich werde überhaupt nicht angerufen.
Dies ist eine wichtige Sache zu verstehen, weil es, dass results
bedeutetnull
konnte nicht sein, während das Merkmal der lazy evaluation beibehalten - bis Sie Gebrauch versuchtenresults
, wäre es nicht, ob es funktioniert hat sollte null
oder nicht sein!
Was wäre in "Ergebnisse" ist * ein Objekt, das die Abfrage * darstellt. Denken Sie daran: Das Abfrageobjekt ist NICHT das Ergebnis der Abfrage. Das Abfrageobjekt ist etwas, das Sie * zum Erhalt der Ergebnisse der Abfrage * iterieren können, es sind nicht die Ergebnisse selbst. –