.net: DataTable, устанавливающий все нечисловые значения таблицы данных как NULL
Нужна помощь для форматирования данных в.net, давая код ниже в vb.net
Dim dt As New DataTable
dt.Columns.Add("a", GetType(System.String))
dt.Columns.Add("b", GetType(System.String))
dt.Rows.Add("N/A", "22")
dt.Rows.Add("99", "22.3")
dt.Rows.Add("Not Available", "#Error")
dt.Rows.Add("5.5", "10")
Нужны предложения для преобразования таблицы данных в.net C#/vb
Преобразуйте все нечисловые значения таблицы данных в NULL, пытаясь избежать зацикливания и обновления каждой строки с помощью регулярных выражений
'Result dt
'a b
'null 22
'99 22.3
'null null
'5.5 10
2 ответа
Хм, если вам не нужно, чтобы таблица содержала нечисловое значение для начала, и вы не получили его таким образом, вы можете написать свой собственный метод для добавления строк, который проверяет перед добавлением их, являются ли они числовыми или нет,
В противном случае я не могу придумать что-либо, препятствующее циклу, если вы не хотите использовать регулярные выражения по некоторым причинам, вы можете проверить, возможно ли преобразование (Convert.ToDouble)
Размещать рабочий код (vb)
Dim dt As New DataTable
dt.Columns.Add("a")
dt.Columns.Add("b")
dt.Columns.Add("c")
Dim typeList As New List(Of Type)
typeList.Add(GetType(Integer))
typeList.Add(Nothing)
typeList.Add(GetType(Decimal))
dt.Rows.AddRow(typeList, {10, "23ff", "Test if Numeric 45.6"})
dt.Rows.AddRow(typeList, {"Ten", "We are here", "89"})
Метод расширения
<System.Runtime.CompilerServices.Extension()> _
Public Sub AddRow(dr As DataRowCollection, ByRef objTypeConversion As List(Of Type), objValue As Object())
Dim length = objTypeConversion.Count
If length <> objValue.Length Then
Throw New Exception("Data Types must be provided for all Values")
End If
Dim _n As Integer = 0
objTypeConversion.ForEach(Function(t)
If t IsNot Nothing Then
Try
Dim converter = TypeDescriptor.GetConverter(t)
If converter IsNot Nothing Then
objValue(_n) = CTypeDynamic(converter.ConvertFrom(objValue(_n)), t)
End If
Catch ex As Exception
objValue(_n) = DBNull.Value
End Try
End If
_n = _n + 1
End Function)
'Logic to convert into provided datatype
dr.Add(objValue)
End Sub