В конце я использовал биты из каждой опции и небольшую настройку, чтобы заставить его работать с пустыми полями.
Первое, что нужно сделать, - это скопировать функцию CopyToDataTable в VB, это делается здесь
http://msdn.microsoft.com/en-us/library/bb669096.aspx
Когда я попробовал это, произойдет сбой, если столбец обнулится, поэтому я искал и нашел мод для этого кода, который будет работать.Вот оно в полном объеме
Public Function ExtendTable(ByVal table As DataTable, ByVal type As Type) As DataTable
For Each f As FieldInfo In type.GetFields()
If (Not _ordinalMap.ContainsKey(f.Name)) Then
Dim dc As DataColumn
dc = If(table.Columns.Contains(f.Name), table.Columns(f.Name), table.Columns.Add(f.Name, f.FieldType))
_ordinalMap.Add(f.Name, dc.Ordinal)
End If
Next f
For Each p As PropertyInfo In type.GetProperties()
If Not _ordinalMap.ContainsKey(p.Name) Then
Dim colType As Type = p.PropertyType
If (colType.IsGenericType) AndAlso (colType.GetGenericTypeDefinition() Is GetType(Nullable(Of ))) Then
colType = colType.GetGenericArguments()(0)
End If
Dim dc As DataColumn = IIf(table.Columns.Contains(p.Name), table.Columns(p.Name), table.Columns.Add(p.Name, colType))
_ordinalMap.Add(p.Name, dc.Ordinal)
End If
Next
Return table
End Function
Повышение голосов по всему кругу, так как все они работали бы. Я просто выбрал этот вариант, так как он более аккуратный