gpt4 book ai didi

c# - 从类创建数据表(不是实例列表)

转载 作者:太空狗 更新时间:2023-10-30 00:08:43 27 4
gpt4 key购买 nike

这个问题涉及泛型和类型以及数据表。

下面的代码片段在网络上随处可见,它创建了一个基于通用类型的数据表:

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 行。

我尝试了各种方法 - 有什么想法吗?

最佳答案

实际上很简单,当您意识到在这种情况下不需要(甚至可以)使用泛型时:

public static DataTable CreateEmptyDataTable(Type myType)
{
DataTable dt = new DataTable();

foreach (PropertyInfo info in myType.GetProperties())
{
dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
}

return dt;
}

你可以这样调用它:

System.Type userType = null;
userType = ClassBuilder.ClassFromSourceFile("myclassfile.cs");
DataTable emptyDataTable = CreateEmptyDataTable(userType);

关于c# - 从类创建数据表(不是实例列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6291305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com