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
¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top