Заполнение объекта из DataTable значением по умолчанию при DBNull

StackOverflow https://stackoverflow.com/questions/1325750

Вопрос

Я заполняю объект клиента, как показано ниже.Как мне кратко закодировать что-то вроде следующего?

If IsDbNull(.Age) Then 
  .Age = 10
Else
  .Age = dataRow("Age")
End If 

Вот контекст, в котором я хотел бы использовать его:

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
Это было полезно?

Решение

В рамках Microsoft.VisualBasic в пространстве имен есть функция под названием IIF.Он работает путем оценки выражения и возврата одного значения, если выражение истинно, и другого, если оно ложно.

Так

.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())

В более новых версиях Visual Studio (2008 ~) это доступно по умолчанию без импорта (IIF была функция, новая If является оператором):

.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())

Если бы это было не DBNull, но просто Nothing, вы можете использовать оператор объединения нулей:

Dim val = If(objectThatMightBeNothing, DefaultValueToUse)

Видеть MSDN для более подробной информации.

Другие советы

Вы пробовали это?:

.Age = IIf(dr("age") is DbNull, 10, dr("age"))

Надеюсь, поможет.

Какое значение может иметь возраст, если он содержит ноль?
Я предлагаю использовать Nullable(Of Integer) для возраста.

Кроме того, сравните его с DBNull.Value (который используется для сравнения, если базовое поле содержит нулевое значение).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top