信息发布→ 登录 注册 退出

.NET怎么将DataTable转换为List对象

发布时间:2025-11-04

点击量:
定义Person类包含Name和Age属性;2. 使用反射遍历DataTable行与列,通过GetProperty匹配属性并转换值类型,支持可空类型;3. 调用DataTableToList方法将DataTable转为List并输出结果;4. 注意列名需与属性名一致,性能敏感场景建议优化。该方法适用于中小型项目。

在 .NET 中,将 DataTable 转换为 List 是一个常见需求,尤其在处理数据库查询结果时。最常用的方式是通过反射(Reflection)将 DataTable 的每一行映射到一个强类型的对象中。

1. 定义目标类(Model)

假设你有一个 DataTable,包含姓名和年龄字段,先创建对应的类:

public class Person { public string Name { get; set; } public int Age { get; set; } }

2. 使用反射实现转换方法

下面是一个通用方法,可将任意 DataTable 转为 List

using System; using System.Collections.Generic; using System.Data; using System.Reflection; public static List DataTableToList(DataTable dt) where T : new() { List list = new List(); foreach (DataRow row in dt.Rows) { T item = new T(); foreach (DataColumn col in dt.Columns) { // 获取类中的属性 PropertyInfo prop = typeof(T).GetProperty(col.ColumnName); if (prop != null && prop.CanWrite) { object value = row[col]; if (value != DBNull.Value) { // 处理值类型转换(如 int?、DateTime? 等) Type propType = prop.PropertyType; if (Nullable.GetUnderlyingType(propType) is Type nullableType) propType = nullableType; object safeValue = Convert.ChangeType(value, propType); prop.SetValue(item, safeValue, null); } } } list.Add(item); } return list; }

3. 使用示例

调用这个方法非常简单:

// 假设 dt 是你的 DataTable DataTable dt = GetDataTable(); // 模拟获取数据 List people = DataTableToList(dt); foreach (var p in people) { Console.WriteLine($"姓名: {p.Name}, 年龄: {p.Age}"); }

4. 注意事项

  • 列名必须与类的属性名完全匹配(包括大小写)。
  • 支持可空类型(如 int?、DateTime?),代码中已做兼容处理。
  • 性能敏感场景建议使用表达式树或手动映射提升效率。
  • 如果字段多或数据量大,可以考虑使用 AutoMapperFastMember 等库优化。
基本上就这些。这种方法简单直接,适合大多数中小型项目使用。
标签:# 适用于  # var  # 类型转换  # console  # 对象  # typeof  # 数据库  # 是一个  # 遍历  # Generic  # 你有  # 可将  # 量大  # 转换为  # 最常用  # 类中  # 象中  # app  # Reflection  # Nullable  # public  # 空类型  # 值类型  # class  # using  # int  # foreach  # if  # NULL  # Object  # String  # Static  # .net  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!