我有下面的代码,我在我的项目中为datatable创建了扩展。它实际上工作。只是想知道是否有任何优化可以通过。谢谢。 =)在数据表中为NULL设置默认值
我知道这个问题应该以某种方式属于CR。只是通过问。
<Extension()>
Public Function HasNull(ByVal dataTable As DataTable) As Boolean
For Each column As DataColumn In dataTable.Columns
If dataTable.Rows.OfType(Of DataRow)().Any(Function(r) r.IsNull(column)) Then
Return True
End If
Next
Return False
End Function
<Extension()>
Public Function SetDefaultForNull(ByVal dataTable As DataTable) As DataTable
For Each row As DataRow In dataTable.Rows
For Each col As DataColumn In dataTable.Columns
Dim value As Object = row(col)
If IsDBNull(value) Then
Dim dataType As String = col.DataType.ToString
Select Case dataType
Case "System.DateTime"
value = New DateTime
Case "System.Decimal", "System.Int16", "System.Int32", "System.Int64"
value = 0
Case "System.String"
value = String.Empty
Case "System.Boolean"
value = False
Case Else
value = 0
End Select
row(col) = value
End If
Next
Next
Return dataTable
End Function
我会处理的情况是输入表是'Nothing',要么抛出'ArgumentNullException'或返回'True' /'False'。另一个小改进:我会循环行而不是列。考虑到除最后一列外,所有列都是非空的。在检测到空值之前,您将循环所有列的所有行。如果你循环行,你确定已经在第一行(如果最后一列为空)。 –
@Tim Schmelter。感谢您的回应。我的第二个功能的意图是为每个空单元设置一个默认值。所以我会无论如何不得不遍历每一行和每列? – HengChin
我主要是指第一种方法。 –