反射DataTable转实体类

本文介绍了一个将DataTable转换为实体类的C#代码实现,通过泛型和反射机制,该方法能够灵活地处理不同类型的数据字段,适用于.NET环境下的数据操作。
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.Reflection;
 5 
 6 namespace Dll
 7 {
 8     public static class ToEntity
 9     {
10         /// <summary>
11         /// 将DataTable转换成实体类
12         /// </summary>
13         /// <typeparam name="T">实体类</typeparam>
14         /// <param name="dt">DataTable</param>
15         /// <returns></returns>
16         public static List<T> DtConvertToModel<T>(DataTable dt) where T:new()
17         {
18             List<T> ts = new List<T>();
19             foreach (DataRow dr in dt.Rows)
20             {
21                 T t = new T();
22                 foreach (PropertyInfo pi in t.GetType().GetProperties())
23                 {
24                     if (dt.Columns.Contains(pi.Name))
25                     {
26                         if (!pi.CanWrite) continue;
27                         var value = dr[pi.Name];
28                         if (value!= DBNull.Value)
29                         {
30                             switch (pi.PropertyType.FullName)
31                             {
32                                 case "System.Decimal":
33                                     pi.SetValue(t, decimal.Parse(value.ToString()), null);
34                                     break;
35                                 case "System.String":
36                                     pi.SetValue(t, value.ToString(), null);
37                                     break;
38                                 case "System.Int32":
39                                     pi.SetValue(t, int.Parse(value.ToString()), null);
40                                     break;
41                                 default:
42                                     pi.SetValue(t, value, null);
43                                     break;
44                             }
45                         }
46                     }                    
47                 }
48                 ts.Add(t);
49             }
50             return ts;
51         }
52     }
53 }

 

转载于:https://www.cnblogs.com/chenyanbin/p/11123685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值