Старая запись, но я подумал, что мне нужно взвесить расширение DataTable, которое может преобразовывать один столбец за раз, в заданный тип:
public static class DataTableExt
{
public static void ConvertColumnType(this DataTable dt, string columnName, Type newType)
{
using (DataColumn dc = new DataColumn(columnName + "_new", newType))
{
// Add the new column which has the new type, and move it to the ordinal of the old column
int ordinal = dt.Columns[columnName].Ordinal;
dt.Columns.Add(dc);
dc.SetOrdinal(ordinal);
// Get and convert the values of the old column, and insert them into the new
foreach (DataRow dr in dt.Rows)
dr[dc.ColumnName] = Convert.ChangeType(dr[columnName], newType);
// Remove the old column
dt.Columns.Remove(columnName);
// Give the new column the old column's name
dc.ColumnName = columnName;
}
}
}
Затем его можно вызвать так:
MyTable.ConvertColumnType("MyColumnName", typeof(int));
Конечно, используя любой тип, который вы пожелаете, при условии, что каждое значение в столбце действительно может быть преобразовано в новый тип.