【发布时间】:2011-09-11 14:07:43
【问题描述】:
这个问题涉及泛型和类型以及数据表。
下面的 sn-p 到处都是网络,并基于泛型类型创建数据表:
public static DataTable ListToDataTable<T>(List<T> list)
{
DataTable dt = new DataTable();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
}
foreach (T t in list)
{
DataRow row = dt.NewRow();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
row[info.Name] = info.GetValue(t, null);
}
dt.Rows.Add(row);
}
return dt;
}
我正在使用出色的 FileHelpers 库将批量记录导入 SQL Server。要使用 SqlBulkCopy,我需要一个包含给定类型列的数据表。 Filehelpers 可以在运行时读取 .cs 文件并基于该文件创建您的类型。例如:
System.Type userType = null;
userType = ClassBuilder.ClassFromSourceFile("myclassfile.cs");
我想更改上面的方法,以便在传递类型(例如“userType”)时为我创建列。即方法签名将类似于:
public static DataTable TypeToDataTable<T>(<T> myType)
并会返回一个带有列的空数据集,准备好添加 userType 行。
我尝试了各种方法 - 有什么想法吗?
【问题讨论】:
标签: c# generics reflection types system.data.datatable