Wie behandelt man Nullwerte in linq?

8
%Vor%

Die Methode GetAttendanceListOf(q._RollNumber) im obigen Code gibt eine Liste von Datensätzen aus der Datenbank oder "null" zurück, wenn für das übergebene "roll-no" keine Datensätze vorhanden sind. Eine linq-Abfrage wird beendet, wenn der Fehler

generiert wird
  

"Der Wert darf nicht null sein".

Gibt es eine Möglichkeit, diesen Fehler zu behandeln und LINQ zum nächsten Schritt zu springen?

    
GG Arora 11.04.2013, 12:06
quelle

5 Antworten

10
%Vor%

Das Problem besteht darin, Where() für eine Null-Instanz auszuführen. Mögliche Lösungen:

1) modify GetAttendanceListOf , um eine leere Liste zurückzugeben, wenn keine Teilnahme (gute Idee im Allgemeinen, als Null-Objekt-Muster ist oft ein Lebensretter, und für die Sammlung ist eine leere Sammlung oft semantisch ähnlich null) 2) Wenn Sie diese Methode nicht steuern, schreiben Sie eine sichere Erweiterungsmethode, die im Fall von null eine leere Liste zurückgibt, z. B.

%Vor%

Dann nenne es:

%Vor%     
Zdeslav Vojkovic 11.04.2013, 12:12
quelle
0

Sie können versuchen

%Vor%

Dies überprüft, dass Sie keine Operation Where für ein Null-Objekt ausführen und alle Null-Ergebnisse herausfiltern.

    
Cornelius 11.04.2013 12:14
quelle
0

Linq ToList () gibt eine leere Liste zurück, wenn keine Ergebnisse vorliegen. Der Fehler könnte von anderswo kommen.

Ich würde Ihnen empfehlen, Methoden zum Erstellen Ihrer Objekte zu verwenden. Dadurch wird Ihre Abfrage einfacher zu lesen und zu debuggen. Ich würde empfehlen, dass Sie es in mehreren Schritten tun, um zu bestimmen, was null wird und wo genau es nicht ausgeführt wird.

Der Fehler kommt möglicherweise von GetAttendanceListOf (). Wenn Methoden IList oder IEnumerable zurückgeben, sollten Sie eine leere Liste zurückgeben, wenn keine Ergebnisse vorhanden sind. Dadurch wird verhindert, dass Sie jedes Mal validieren, wenn sie null ist oder nicht.

    
JCorriveau 11.04.2013 12:13
quelle
0

Wie von @Zdeslav Vojkovic vorgeschlagen, ändern Sie GetAttendanceListOf , um eine leere Liste zurückzugeben, wenn null oder etwas wie:

%Vor%

(Sie könnten es möglicherweise ohne die zusätzlichen Klammern machen)

    
Eli Algranti 11.04.2013 12:26
quelle
0

Für eine schnelle Lösung, ändern Sie diese Zeile

  

_AttendedDays = new AttendanceBAL (). GetAttendanceListOf (q._RollNumber). Wo ...

Zu diesem

  

_AttendedDays = (new AttendanceBAL (). GetAttendanceListOf (q._RollNumber) ?? neue Liste () ). Wo ...

    
Mat J 11.04.2013 12:33
quelle

Tags und Links