Заполнение объекта из DataTable значением по умолчанию при DBNull
-
19-09-2019 - |
Вопрос
Я заполняю объект клиента, как показано ниже.Как мне кратко закодировать что-то вроде следующего?
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 (который используется для сравнения, если базовое поле содержит нулевое значение).