c#将list类型转换成DataTable方法示例



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`,它接受一个 `List` 类型的参数,并返回一个 `DataTable`。此方法首先创建一个空的 `DataTable`,然后遍历 `T` 类型的所有属性,将这些属性名作为列名添加到 `DataTable` 中。接下来,它遍历 `List` 中的每个元素,为每个元素创建一个 `DataRow`,并填充该元素的所有属性值。最后,它返回填充好的 `DataTable`。

请注意,为了使用 `TypeDescriptor.GetProperties` 和 `PropertyDescriptor`,您的项目可能需要引用 `System.ComponentModel` 命名空间。此示例还定义了一个简单的 `Person` 类作为演示数据。