C#中将DataTable转化成List<T>的方法解析
张吉惟 2023-08-13C#
前言在C#中,我们常常需要将DataTable转换成List的数据结构。这样做的好处是可以方便地对数据进行操作和处理,同时提高代码的可读性和性能。本文将介绍一种常见
前言
在C#中,我们常常需要将DataTable转换成List<T>的数据结构。这样做的好处是可以方便地对数据进行操作和处理,同时提高代码的可读性和性能。本文将介绍一种常见的方法来实现DataTable到List<T>的转换。
方法解析
要将DataTable转化成List<T>,我们可以使用反射来实现。以下是具体的步骤:
- 创建一个泛型方法,输入参数为DataTable和泛型类型T,并返回一个List<T>。
- 通过反射获取T类型的所有属性。
- 遍历DataTable的每一行,创建一个T类型的对象。
- 使用反射将DataTable的每一列的值赋给T对象的属性。
- 将T对象添加到List<T>中。
- 返回List<T>。
下面是一个示例代码:
public List<T> DataTableToList<T>(DataTable dt) where T : new() { List<T> resultList = new List<T>(); PropertyInfo[] properties = typeof(T).GetProperties(); foreach (DataRow row in dt.Rows) { T item = new T(); foreach (PropertyInfo property in properties) { if (dt.Columns.Contains(property.Name)) { property.SetValue(item, row[property.Name]); } } resultList.Add(item); } return resultList; }
代码解释
上述代码中,我们定义了一个泛型方法DataTableToList<T>来实现DataTable到List<T>的转换。使用Where约束T是为了限制T类型必须有一个无参构造函数,这样我们才能使用new关键字创建对象。
在方法体中,我们首先创建了一个空的List<T> resultList,用于存储转换后的对象。然后使用typeof(T).GetProperties()通过反射获取了T类型的所有属性。
接下来,我们遍历DataTable的每一行,创建了一个新的T类型的对象item。然后,再对每一个属性进行遍历,判断DataTable中是否存在对应的列。如果存在,就使用反射的SetValue方法将DataTable对应列的值赋给T对象的属性。
最后,将T对象添加到resultList中,并在循环结束后返回resultList。
总结
通过使用反射,我们可以将DataTable转换成List<T>,从而方便地对数据进行操作和处理。这种方法可以减少手动编写转换代码的工作量,提高代码的可读性和性能。
很赞哦! ()