我正在填充客户对象,如下所示。我如何简洁地编写如下代码?
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
答案 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。