Заполнение объекта из DataTable значением по умолчанию, когда DBNull - PullRequest
0 голосов
/ 25 августа 2009

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

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

Ответы [ 3 ]

0 голосов
/ 25 августа 2009

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

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

0 голосов
/ 25 августа 2009

В пространстве имен 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 .

0 голосов
/ 25 августа 2009

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

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

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

...