C#中将DataTable转化成ListT的方法解析

在C#中,数据的操作是至关重要的一个方面,常常需要将数据从一个形式转换成另一个形式以满足我们的需求。其中,DataTable和List是常见的两种数据形式。DataTable是一种表格形式的数据类型,它以行和列的形式存储数据。List是一种集合类型,它可以存储任意类型的对象,并且可以动态增加或删除元素。在许多情况下,我们需要将DataTable转换成List,以便于进行后续的操作和使用。本文将介绍如何在C#中将DataTable转化成ListT的方法,其中T代表任意需要的类型。

  1. 使用反射

使用反射是将DataTable转换成ListT的一种常见方法。反射是一种与类型相关的编程模型,它允许程序员遍历并操作一个程序集里面的元数据。

1.1 创建一个泛型方法

首先,我们需要在C#中创建一个泛型方法,该方法可以将 DataTable 转换成 List. 泛型方法是一种可以处理任何类型参数的方法。

public static List<T> ConvertDataTableToList<T>(DataTable table) where T : class, new()
{
    List<T> list = new List<T>();

    foreach (DataRow row in table.Rows)
    {
        T obj = new T();
        foreach (PropertyInfo info in obj.GetType().GetProperties())
        {
            if (table.Columns.Contains(info.Name))
            {
                if (row[info.Name] != DBNull.Value)
                {
                    info.SetValue(obj, row[info.Name], null);
                }
            }
        }
        list.Add(obj);
    }
    return list;
}

1.2 将DataTable转换成ListT

然后,我们可以调用上面创建的方法将DataTable转换成ListT。

DataTable table = new DataTable();
//添加列,省略

List<MyClass> list = ConvertDataTableToList<MyClass>(table);
  1. 使用LINQ查询

除了使用反射之外,我们还可以使用LINQ查询将DataTable转换成ListT。LINQ查询是一种强大的查询工具,可以在C# 内部把各种数据转换成查询结果。这里我们要使用DataTable的AsEnumerable方法和LINQ Select方法。

List<MyClass> list = table.AsEnumerable().Select(row =>
        {
            MyClass obj = new MyClass();
            obj.Field1 = row.Field<type>("ColumnName1");
            obj.Field2 = row.Field<type>("ColumnName2");
            obj.Field3 = row.Field<type>("ColumnName3");
            return obj;
        }).ToList();

其中type是你的字段类型,MyClass是你设定的目标类型,在Linq 的Select方法中,我们设置了在遍历每一行时对MyClass中的每一个字段进行赋值。最后将结果转换成一个List类型。

总结:

以上是两种将DataTable转换成ListT的方法,具体各有优劣,可以根据自己的需求选择合适的方法。使用反射可以处理任何类型参数,并且在类型不确定的情况下非常有效,但是在性能上略微低于使用LINQ。而使用LINQ则可以通过语句链轻松处理大量的数据,代码可读性较好。

无论你选择哪一种方法,都需要仔细选择和考虑,在类型和性能方面权衡取舍。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

然然学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值