Bevöl Objekt aus Datentabelle mit Standardwert, wenn DBNull
-
19-09-2019 - |
Frage
Ich bin Bestücken des Kundenobjekts, wie unten dargestellt. Wie kann ich würde ich prägnant Code so etwas wie die folgenden?
If IsDbNull(.Age) Then
.Age = 10
Else
.Age = dataRow("Age")
End If
Hier ist der Zusammenhang mag ich es zu benutzen, in:
Public Shared Function Retrieve() As List(Of Customer)
Dim dt As DataTable = Dac.ExecuteDataTable("CustomerRetrieveAll", Nothing)
Dim customerList As New List(Of Customer)
For Each dr As DataRow In dt.Rows
customerList.Add(New Customer {
.CustomerId = CType(dr("CustomerID"), Integer),
.LastName = dr("LastName").ToString,
.Age = dr("Age").ToString,
.FirstName = dr("FirstName").ToString})
Next
Return customerList
End Function
Lösung
Im Microsoft.VisualBasic
Namensraum gibt es eine Funktion namens IIF
. Es funktioniert durch die Auswertung eines Ausdrucks und der Rückkehr einen Wert, wenn der Ausdruck wahr ist, und eine andere, wenn falsch.
So
.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
In neueren Versionen von Visual Studio (2008 ~), ist dies standardmäßig ohne Import verfügbar ein Import (IIF
war eine Funktion, die neue If
ist ein Operator):
.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Wenn es nicht DBNull
ist, aber nur Nothing
, können Sie den Null koaleszierende Operator verwenden:
Dim val = If(objectThatMightBeNothing, DefaultValueToUse)
Siehe MSDN für mehr Details.
Andere Tipps
Haben Sie dies versuchen:
.Age = IIf(dr("age") is DbNull, 10, dr("age"))
Hope es hilft.
Was Wert das Alter haben kann, wenn sie enthält null?
Ich schlage vor, mit Nullable (Of Integer) für Alter.
Auch vergleicht es gegen DBNull.Value (die zum Vergleich in dem Fall verwendet wird, die zugrunde liegende Feld enthält Nullwert).