Prüfen Sie, ob Einzel - () LINQ NULL zurück
Habe ich eine LINQ-Abfrage, sollte wieder entweder ein einzelnes Ergebnis oder nicht-Ergebnis. Ich nenne Single()
um das Ergebnis zu erhalten wie diese:
var propertyDataSource = (from x in myCollection
where SomeCondition(x)
select x).Single();
Dies funktioniert in Ordnung, wenn meine Abfrage hat ein einziges Ergebnis, aber wenn es gibt keine Ergebnisse, es wirft ein System.InvalidOperationException
mit der Meldung - Sequenz enthält keine Elemente.
Wie kann ich dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
SingleOrDefault
statt.Single
wirft eine Ausnahme wenn die Aufzählung nicht enthalten genau ein element,SingleOrDefault<T>
gibtdefault(T)
(das istnull
für Referenz-Typen) beim Aufruf leer Aufzählungen statt. Beachten Sie, dass die beiden werfen wird, wenn es mehr als ein element in der Aufzählung..SingleOrDefault()
zurück, die einzigen passenden Objekt oder den default-Wert (das istnull
für Referenz-Typen. Sie haben, um dienull
Fall selbst aber, weil Sie werden am Ende mit einemNullReferenceException
ziemlich schnell.Als seitliche Anmerkung, die Sie verwenden sollten
.Any()
statt.Count() > 0
zu vermeiden, Durchlaufen Ihren gesamten Datenbestand bei der VerwendungIEnumerable
s.Durch design,
Single
wird eine exception werfen, wenn die Sequenz leer ist. VerwendenSingleOrDefault
zurücknull
wenn Sie die Sequenz leer ist..FirstOrDefault()
gibt null (oder den Standardwert der Art), wenn nichts vorhanden ist (keine übereinstimmung gefunden),.Single()
erwarten, dass genau ein match..SingleOrDefault()
null zurück (oder den Standardwert der Art), wenn nichts vorhanden ist, aber werfen eine Ausnahme, wenn Sie mehr als ein Spiel.