Il popolamento oggetto dal DataTable con valore predefinito quando DBNull
-
19-09-2019 - |
Domanda
sto popolano l'oggetto cliente come illustrato di seguito. Come faccio avrei conciso codice qualcosa come la seguente?
If IsDbNull(.Age) Then
.Age = 10
Else
.Age = dataRow("Age")
End If
Ecco il contesto mi piacerebbe utilizzarlo 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
Soluzione
All'interno del namespace Microsoft.VisualBasic
c'è una funzione chiamata IIF
. Funziona valutando un'espressione e restituendo un valore se l'espressione è vera e un altro se falsa.
.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Nelle versioni più recenti di Visual Studio (2008 ~), questo è disponibile di default senza l'importazione un'importazione (IIF
era una funzione, il nuovo If
è un operatore):
.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Se non è stato DBNull
, ma solo Nothing
, è possibile utilizzare l'operatore null coalescenza:
Dim val = If(objectThatMightBeNothing, DefaultValueToUse)
MSDN per maggiori dettagli.
Altri suggerimenti
Hai provato questo:?
.Age = IIf(dr("age") is DbNull, 10, dr("age"))
Speranza che aiuta.
Qual è il valore di età può avere se contiene nulla?
Io suggerisco di usare Nullable (Of Integer) per Age.
Inoltre, confrontarla DBNull.Value (che viene utilizzato per il confronto nel caso il campo sottostante contiene valore nullo).