Ich versuche eine Methode zu erstellen, die eine SQL-Tabelle abfragt und die gefundenen Werte einer neuen Liste von Objekten zuweist. Hier ist ein kleines Beispiel, wie es funktioniert (unter der Annahme, den Leser und die Verbindung eingerichtet sind und einwandfreie Funktion):Inline-Nullprüfung für SqlDataReader-Objekte
List<MyObject> results = new List<MyObject>();
int oProductID = reader.GetOrdinal("ProductID");
int oProductName = reader.GetOrdinal("ProductName");
while (reader.Read())
{
results.Add(new MyProduct() {
ProductID = reader.GetInt32(oProductID),
ProductName = reader.GetString(oProductName)
});
}
Es gibt ungefähr 40 andere Eigenschaften auch alle von ihnen auf NULL festlegbare in der MyObject
Definition, so dass ich versuche, die Aufträge so sauber wie möglich zu halten. Das Problem ist, dass ich dem Objekt null Werte zuweisen muss, wo immer der Leser eine Null zurückgibt. Im obigen Code, wenn der Leser eine "Data is Null" -Ausnahme auslöst. Ich bin mir bewusst, dass es möglich ist, eine if
-Anweisung zu verwenden, um zuerst nach einem DbNull
zu suchen, aber da es so viele Eigenschaften gibt, hoffe ich, den Code sauberer zu halten, indem ich eine if
Aussage für jede einzelne Eigenschaft buchstabieren muss.
Ein bisschen Suche führte mich zum null-coalescing Operator, der scheint genau das zu tun, was ich will. Also habe ich versucht, die Zuordnungen zu ändern wie folgt aussehen:
ProductID = reader.GetInt32(oProductID) ?? null,
ProductName = reader.GetString(oProductName) ?? null
, die für jede string
funktioniert gut, aber gibt mir Fehler von Operator '??' cannot be applied to operands of type 'int' and '<null>'
(oder einem anderen Datentyp außer string
ich speziell die int
(und alles andere rief). als nullable in der Objektdefinition, aber hier ist es mir zu sagen, es kann das nicht tun
die Frage
gibt es eine Möglichkeit nulls in diesem Fall zu behandeln, das kann. (1) Inline geschrieben werden (um separate if
Anweisungen für jede Eigenschaft zu vermeiden) und (2) Mit jedem Datentyp arbeiten?
Elegant einfach und funktioniert erstaunlich gut. Hut ab vor dir, Sir. – thanby