using System;
using System.Collections.Generic;
using System.Data;
public class ListToDataTableConverter
{
public static DataTable ConvertToDataTable<T>(List<T> data)
{
// 创建DataTable实例
DataTable table = new DataTable();
// 获取T类型的所有属性
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
// 将属性名添加到DataTable的列中
foreach (PropertyDescriptor prop in properties)
{
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}
// 遍历数据,将数据添加到DataTable的行中
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
{
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
}
table.Rows.Add(row);
}
return table;
}
}
// 示例用法
class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 }
};
DataTable dataTable = ListToDataTableConverter.ConvertToDataTable(people);
// 输出DataTable内容以验证
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine($"Name: {row["Name"]}, Age: {row["Age"]}");
}
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
这个示例中,`ListToDataTableConverter` 类包含了一个泛型方法 `ConvertToDataTable
请注意,为了使用 `TypeDescriptor.GetProperties` 和 `PropertyDescriptor`,您的项目可能需要引用 `System.ComponentModel` 命名空间。此示例还定义了一个简单的 `Person` 类作为演示数据。