Poblar objeto de DataTable con el valor por defecto cuando DBNull
-
19-09-2019 - |
Pregunta
Estoy poblar el objeto de cliente como se muestra a continuación. ¿Cómo me iba a codificar de forma concisa algo como lo siguiente?
If IsDbNull(.Age) Then
.Age = 10
Else
.Age = dataRow("Age")
End If
Aquí está el contexto me gustaría utilizarlo en:
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
Solución
Dentro del espacio de nombres Microsoft.VisualBasic
hay una función llamada IIF
. Funciona mediante la evaluación de una expresión y devolver un valor si la expresión es verdadera y otro si es falso.
Entonces
.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
En las nuevas versiones de Visual Studio (2008 ~), esto está disponible de forma predeterminada, sin importar una importación (IIF
era una función, la nueva If
es un operador):
.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Si no se DBNull
, pero sólo Nothing
, se puede utilizar el operador nulo coalescencia:
Dim val = If(objectThatMightBeNothing, DefaultValueToUse)
MSDN para obtener más detalles.
Otros consejos
¿Usted intentó esto:?
.Age = IIf(dr("age") is DbNull, 10, dr("age"))
Espero que ayuda.
¿Qué valor puede tener la edad si contiene nula?
Se sugiere emplear anulable (De entero) para la edad.
Además, compararlo contra DBNull.Value (que se utiliza para la comparación en caso de que el campo subyacente contiene el valor nulo).