DataTable转换泛型集合 实体类

 

  

 1         /// <summary> 
 2         /// 单表查询结果转换成泛型集合 --实体类的字段名 需要与DataTable的列名一致
 3         /// </summary> 
 4         /// <typeparam name="T">泛型集合类型</typeparam> 
 5         /// <param name="dt">查询结果DataTable</param> 
 6         /// <returns>以实体类为元素的泛型集合</returns> 
 7         public static IList<T> convertToList<T>(DataTable dt) where T : new()
 8         {
 9             // 定义集合 
10             List<T> ts = new List<T>();
11 
12             // 获得此模型的类型 
13             Type type = typeof(T);
14             //定义一个临时变量 
15             string tempName = string.Empty;
16             //遍历DataTable中所有的数据行  
17             foreach (DataRow dr in dt.Rows)
18             {
19                 T t = new T();
20                 // 获得此模型的公共属性 
21                 PropertyInfo[] propertys = t.GetType().GetProperties();
22                 //遍历该对象的所有属性 
23                 foreach (PropertyInfo pi in propertys)
24                 {
25                     tempName = pi.Name;//将属性名称赋值给临时变量   
26                     //检查DataTable是否包含此列(列名==对象的属性名)     
27                     if (dt.Columns.Contains(tempName))
28                     {
29                         // 判断此属性是否有Setter   
30                         if (!pi.CanWrite) continue;//该属性不可写,直接跳出   
31                         //取值   
32                         object value = dr[tempName];
33                         //如果非空,则赋给对象的属性   
34                         if (value != DBNull.Value)
35                             pi.SetValue(t, value, null);
36                     }
37                 }
38                 //对象添加到泛型集合中 
39                 ts.Add(t);
40             }
41             return ts;
42         }

 

posted @ 2013-08-16 17:56  寂小魔  阅读(343)  评论(0编辑  收藏  举报