Prüfe, ob single () LINQ NULL zurückgibt

8

Ich habe eine LINQ-Abfrage, die entweder ein einzelnes Ergebnis oder keine Ergebnisse zurückgeben soll. Ich rufe Single() auf, um das Ergebnis wie folgt zu erhalten:

%Vor%

Dies funktioniert, wenn meine Abfrage ein einzelnes Ergebnis hat, aber wenn es keine Ergebnisse gibt, wird System.InvalidOperationException mit der Nachricht Sequenz enthält keine Elemente .

Wie kann ich das beheben?

    
Mina Gabriel 17.01.2014, 21:29
quelle

4 Antworten

22

Verwenden Sie stattdessen SingleOrDefault .

>

Single löst eine Ausnahme bei der Aufzählung aus enthält nicht genau ein Element, SingleOrDefault<T> gibt default(T) (das ist null für Referenztypen) wenn stattdessen leere Aufzählungen aufgerufen werden. Beachten Sie, dass beide Argumente ausgegeben werden, wenn mehr als ein Element in der Aufzählung vorhanden ist.

    
MarcinJuraszek 17.01.2014, 21:31
quelle
7

.SingleOrDefault() gibt das einzelne übereinstimmende Objekt oder den Standardwert zurück (das ist null für Referenztypen. Sie müssen jedoch selbst mit null umgehen, weil Sie mit einem NullReferenceException pretty enden schnell.

Als Randnotiz sollten Sie .Any() anstelle von .Count() > 0 verwenden, um zu vermeiden, dass Sie bei Verwendung von IEnumerable s über Ihre gesamte Datenmenge iterieren.

    
Vache 17.01.2014 21:31
quelle
5

Single wird vom Design aus ein Design erstellen Ausnahme, wenn die Sequenz leer ist. Verwenden Sie SingleOrDefault , um null bei Ihrer Sequenz zurückzugeben ist leer.

    
Douglas 17.01.2014 21:31
quelle
5

.FirstOrDefault() gibt null (oder den Standardwert des Typs) zurück, wenn nichts existiert (keine Übereinstimmung gefunden), .Single() erwartet genau eine Übereinstimmung. .SingleOrDefault() wird null (oder den Standardwert des Typs) zurückgeben, wenn nichts existiert, aber eine Ausnahme auslöst, wenn Sie mehr als eine Übereinstimmung haben.

    
AD.Net 17.01.2014 21:31
quelle

Tags und Links