400 Stimmen

Was gibt LINQ zurück, wenn die Ergebnisse leer sind?

Ich habe eine Frage zu LINQ-Abfragen. Normalerweise gibt eine Abfrage eine IEnumerable<T> Typ. Wenn die Rückgabe leer ist, ist nicht sicher, ob sie null ist oder nicht. Ich bin nicht sicher, ob die folgenden ToList() wird eine Ausnahme oder einfach eine leere List<string> wenn nichts gefunden wird in IEnumerable Ergebnis?

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

Ich weiß, es ist eine sehr einfache Frage, aber ich habe im Moment keinen VS zur Verfügung.

671voto

leppie Punkte 111830

Es wird ein leeres enumerable zurückgegeben. Es wird nicht null sein. Sie können ruhig schlafen :)

51voto

Noich Punkte 13161

Sie können auch die .Any() Methode:

if (!YourResult.Any())

Nur ein Hinweis, dass .Any werden die Datensätze weiterhin aus der Datenbank abgerufen; mit einer .FirstOrDefault()/.Where() wird genauso viel Overhead verursachen, aber Sie wären dann in der Lage, das/die von der Abfrage zurückgegebene(n) Objekt(e) abzufangen

25voto

JP Alioto Punkte 44283
var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(Dump ist von LinqPad )

19voto

Paul van Brenk Punkte 7189

.ToList gibt eine leere Liste zurück. (genauso wie new List<T>() );

9voto

kay.one Punkte 7492

Wenn Sie in Linq-to-SQL versuchen, das erste Element einer Abfrage zu erhalten, die keine Ergebnisse liefert, erhalten Sie sequence contains no elements Fehler. Ich kann Ihnen versichern, dass der genannte Fehler nicht gleichzusetzen ist mit object reference not set to an instance of an object . abschließend nein, es wird nicht null zurückgegeben, da null nicht sagen kann sequence contains no elements wird es immer heißen object reference not set to an instance of an object ;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X