Ich habe eine Frage zur LINQ-Abfrage. Normalerweise gibt eine Abfrage einen IEnumerable<T>
Typ zurück. Wenn die Rückgabe leer ist, ist nicht sicher, ob sie null ist oder nicht. Ich bin nicht sicher, ob das Folgende ToList()
eine Ausnahme auslöst oder nur eine leere, List<string>
wenn nichts im IEnumerable
Ergebnis gefunden wird.
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ß, dass es eine sehr einfache Frage ist, aber ich habe derzeit kein VS zur Verfügung.
Antworten:
Es wird eine leere Aufzählung zurückgegeben. Es wird nicht null sein. Du kannst gut schlafen :)
quelle
Sie können auch die
.Any()
Methode überprüfen :Nur eine Notiz,
.Any
mit der die Datensätze weiterhin aus der Datenbank abgerufen werden. Das Ausführen von a.FirstOrDefault()/.Where()
ist genauso viel Aufwand, aber Sie können dann die von der Abfrage zurückgegebenen Objekte abfangenquelle
.Any()
Ihnen nur sagen werden, ob Sie überhaupt übereinstimmende Datensätze haben, bei denen eine tatsächliche Abfrage zum Finden eines bestimmten Werts möglicherweise null ist, wenn dies.Any()
nicht der Fall ist.(Dump ist von LinqPad )
quelle
Count()
ist auch eine Methode, nicht nur die Eigenschaft.ToList gibt eine leere Liste zurück. (wie neue Liste ());
quelle
Wenn Sie in Linq-to-SQL versuchen, das erste Element in einer Abfrage ohne Ergebnisse abzurufen, wird eine
sequence contains no elements
Fehlermeldung angezeigt. Ich kann Ihnen versichern, dass der erwähnte Fehler nicht gleich istobject reference not set to an instance of an object
. abschließend nein, es wird nicht null zurückgegeben, da null nicht sagen kann, dasssequence contains no elements
es immer sagen wirdobject reference not set to an instance of an object
;)quelle
Andere Beiträge hier haben deutlich gemacht, dass das Ergebnis eine "leere" IQueryable ist, die ToList () korrekt in eine leere Liste usw. ändert.
Seien Sie vorsichtig mit einigen Operatoren, da diese werfen, wenn Sie ihnen eine leere Aufzählung senden. Dies kann passieren, wenn Sie sie miteinander verketten.
quelle
Es wird keine Ausnahme ausgelöst, Sie erhalten eine leere Liste.
quelle