Povoar objeto de DataTable com o valor padrão quando DBNull
-
19-09-2019 - |
Pergunta
Eu estou preenchendo o objeto cliente, como mostrado abaixo. Como eu faria Eu concisa código algo como o seguinte?
If IsDbNull(.Age) Then
.Age = 10
Else
.Age = dataRow("Age")
End If
Aqui está o contexto eu gostaria de usá-lo em:
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
Solução
Dentro do namespace Microsoft.VisualBasic
há uma função chamada IIF
. Ele funciona através da avaliação de uma expressão e retornar um valor se a expressão é verdadeira e outro se for falso.
Assim
.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Em versões mais recentes do Visual Studio (2008 ~), este está disponível por padrão, sem importar uma importação (IIF
era uma função, o novo If
é um operador):
.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Se não fosse DBNull
, mas apenas Nothing
, você poderia usar o operador coalescentes nulo:
Dim val = If(objectThatMightBeNothing, DefaultValueToUse)
MSDN para obter mais detalhes.
Outras dicas
Você tente o seguinte:?
.Age = IIf(dr("age") is DbNull, 10, dr("age"))
Hope isso ajuda.
Qual o valor da idade pode ter se contiver nulo?
Eu sugiro usar Nullable (Of Integer) para a idade.
Além disso, compará-lo contra DBNull.Value (o qual é utilizado para comparação no caso do campo subjacente contém valor nulo).