Gewusst wie: behandeln von null-Werten in linq?
recordsList.ListOfRecords = new StudentRecordsBAL()
.GetStudentsList()
.Select(q => new StudentRecords()
{
_RollNumber = q._RollNumber,
_Class = q._Class,
_Name = q._Name,
_Address = q._Address,
_City = q._City,
_State = q._State,
_Subjects = q._Subject,
_AttendedDays = new AttendanceBAL()
.GetAttendanceListOf(q._RollNumber)
.Where(date => date != null)
.Select(date =>
new DateTime(date._Date.Year, date._Date.Month, date._Date.Day))
.Distinct()
.ToList(),
_AttendedSubjects = GetAttendedSubjects(q._RollNumber)
}).ToList();
Die Methode, GetAttendanceListOf(q._RollNumber)
in obige code wird zurückgeben einer Liste von Datensätzen aus der Datenbank oder "null", wenn keine Datensätze vorhanden für die übergebene "roll-no". Eine linq-Abfrage wird beendet, erzeugen Fehler
"Wert darf nicht null sein".
Gibt es eine Möglichkeit das zu handhaben, Fehler und LINQ-springen Sie zum nächsten Schritt?
- Vielleicht können Sie einfach
Where(q => q != null)
, heraus zu filtern, die null-Werte? - Oder, es ist der "Liste der Dinge, oder "null", können Sie so etwas wie
Select(l => l == null ? Iterable.Empty : l)
- Wenn Sie können, ändern Sie einfach
GetAttendanceListOf
zurückkehren leere Liste, wenn nichts gefunden wird, die für die gegebene 'roll-in'.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist mit dem laufen
Where()
auf null-Instanz. Mögliche Lösungen:1) ändern
GetAttendanceListOf
auf eine leere Liste zurück, wenn kein Besuch (gute Idee im Allgemeinen, als null-Objekt-pattern ist sehr oft das Leben gerettet, und für die Sammlung, eine leere Sammlung ist oft semantisch ähnlich zu null)2) wenn Sie keine Kontrolle über diese Methode schreiben, die eine sichere Erweiterung Methode die leere Liste zurück, im Falle von null, z.B.
Dann nennen, wie:
this AttendanceBAL bal
, so dass Sie es immer noch, als ob es 1 argument:bal..GetAttendanceListOf(q._RollNumber)
. Das ist der springende Punkt, der die Erweiterung MethodenKönnen Sie versuchen,
Diese Kontrollen, dass Sie das nicht tun einen
Where
Betrieb auf ein null-Objekt und herauszufiltern, null Ergebnisse.Linq ToList() wird eine leere Liste zurück, wenn es keine Ergebnisse.
Der Fehler kommt von anderswo.
Ich würde empfehlen Sie zu verwenden Methoden, um Ihre Objekte, es wird Ihr-Abfrage einfacher zu Lesen und zu Debuggen. Ich würde empfehlen, dass Sie tun es in mehreren Schritten zu bestimmen, was immer null ist und wo genau es nicht ausgeführt werden kann.
Der Fehler vielleicht kommt von GetAttendanceListOf(), wenn mit Methoden der Rückkehr IList oder IEnumerable, sollten Sie eine leere Liste zurück, wenn es gibt keine Ergebnisse, es wird verhindern, dass Sie überprüfen jedes mal, wenn es null ist oder nicht.
Vorgeschlagen von @Zdeslav Vojkovic ändern
GetAttendanceListOf
zurückkehren leere Liste, wenn null oder etwas wie:(Sie könnten in der Lage sein, es zu tun, ohne die zusätzlichen Klammern)
Für einen quick-fix, Ändern Sie diese Zeile
Zu diesem