数据表转换类_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 数据表转换类

数据表转换类

 2017/11/16 11:18:07  无影飞絮剑  程序员俱乐部  我要评论(0)
  • 摘要:1///<summary>2///数据表转换类3///</summary>4///<typeparamname="T"></typeparam>5publicclassDbTableConvertor<T>whereT:new()6{7///<summary>8///将DataTable转换为实体列表9///</summary>10///<paramname="dt">
  • 标签:数据 数据表
class="code_img_closed" src="/Upload/Images/2017111611/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('a88af3c3-f5a9-455c-975c-f637bd86af63',event)" src="/Upload/Images/2017111611/2B1B950FA3DF188F.gif" alt="" />
 1     /// <summary>
 2     /// 数据表转换类
 3     /// </summary>
 4     /// <typeparam name="T"></typeparam>
 5     public class DbTableConvertor<T> where T : new()
 6     {
 7         /// <summary>
 8         /// 将DataTable转换为实体列表
 9         /// </summary>
10         /// <param name="dt">待转换的DataTable</param>
11         /// <returns></returns>
12         public List<T> ConvertToList(DataTable dt)
13         {
14             // 定义集合  
15             var list = new List<T>();
16 
17             if (0 == dt.Rows.Count)
18             {
19                 return list;
20             }
21 
22             // 获得此模型的可写公共属性  
23             IEnumerable<System.Reflection.PropertyInfo> propertys = new T().GetType().GetProperties().Where(u => u.CanWrite);
24             list = ConvertToEntity(dt, propertys);
25 
26 
27             return list;
28         }
29 
30         /// <summary>
31         /// 将DataTable的首行转换为实体
32         /// </summary>
33         /// <param name="dt">待转换的DataTable</param>
34         /// <returns></returns>
35         public T ConvertToEntity(DataTable dt)
36         {
37             DataTable dtTable = dt.Clone();
38             dtTable.Rows.Add(dt.Rows[0].ItemArray);
39             return ConvertToList(dtTable)[0];
40         }
41         private List<T> ConvertToEntity(DataTable dt, IEnumerable<System.Reflection.PropertyInfo> propertys)
42         {
43             var list = new List<T>();
44             //遍历DataTable中所有的数据行  
45             foreach (DataRow dr in dt.Rows)
46             {
47                 var entity = new T();
48 
49                 //遍历该对象的所有属性  
50                 foreach (System.Reflection.PropertyInfo p in propertys)
51                 {
52                     //将属性名称赋值给临时变量
53                     string tmpName = p.Name;
54 
55                     //检查DataTable是否包含此列(列名==对象的属性名)    
56                     if (!dt.Columns.Contains(tmpName)) continue;
57                     //取值  
58                     object value = dr[tmpName];
59                     //如果非空,则赋给对象的属性  
60                     if (value != DBNull.Value)
61                     {
62                         p.SetValue(entity, value, null);
63                     }
64                 }
65                 //对象添加到泛型集合中  
66                 list.Add(entity);
67             }
68             return list;
69         }
70     }
View Code

 

发表评论
用户名: 匿名