【问题标题】:Populating Object from DataTable with default value when DBNullDBNull 时使用默认值从 DataTable 填充对象
【发布时间】:2010-11-22 11:35:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      如果年龄包含null,它可以有什么值?
      我建议使用 Nullable(Of Integer) 作为 Age。

      另外,将其与 DBNull.Value(用于在基础字段包含空值的情况下进行比较)进行比较。

      【讨论】:

        【解决方案3】:

        你试过了吗?:

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

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2010-12-05
          • 2020-07-10
          • 2019-01-19
          • 2020-05-26
          • 1970-01-01
          • 2021-09-24
          • 2021-06-15
          • 2017-04-16
          • 2020-11-06
          相关资源
          最近更新 更多