我有下面的代碼,我在我的項目中爲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
我主要是指第一種方法。 –