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
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top