在DBNull时使用默认值从DataTable填充对象

时间:2009-08-25 02:22:29

标签: vb.net ado.net datatable ternary-operator dbnull

我正在填充客户对象,如下所示。我如何简洁地编写如下代码?

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 :(得分:0)

你试过这个吗?:

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

希望它有所帮助。

答案 1 :(得分:0)

如果年龄包含null,年龄可以有多大价值? 我建议在年龄时使用Nullable(Of Integer)。

另外,将它与DBNull.Value(在底层字段包含空值时用于比较)进行比较。

答案 2 :(得分:0)

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,则可以使用null-coalescing运算符:

Dim val = If(objectThatMightBeNothing, DefaultValueToUse)

有关详细信息,请参阅MSDN