从DataTable到List(C#.net)

 

平时做业务设计的时候,总是离不了建立各种实体模型Model,但一般这些模型都需要从查询结果DataTable生成,

一般的写法是:为每一个模型编写一个方法,实现DataTable到Model的转换。

但这个方法有一些问题:

 (1)工作效率低:要为每个属性编写赋值语句,工作重复。

(2)代码重用性差:不同的类有不同的属性,这个Model转换不能够用于另一个Model的转换

(3)DataTable字段检测费力:每一次属性赋值都要写个判断,以确定这个Field字段是否存在,它的值是否是否合法,检测费力

解决:利用反射和泛型,写一个通用类,实现这个转换过程。(下面是网上找的代码,是正确的。这个方法我自己也写了,只是没别人写的规范,就拿别人的用用吧

View Code
 1 using System;

 2 using System.Collections.Generic; 

 3 using System.Text; 

 4 using System.Data; 

 5 using System.Reflection;   

 6 namespace NCL.Data 

 7 {     

 8     /// <summary>     

 9     /// 实体转换辅助类     

10     /// </summary>     

11     public class ModelConvertHelper<T> where  T : new()     

12     {        

13          public static IList<T> ConvertToModel(DataTable dt)

14          {            

15              // 定义集合             

16              IList<T> ts = new List<T>();

17              // 获得此模型的类型            

18              Type type = typeof(T); 

19              string tempName = "";             

20              foreach (DataRow dr in dt.Rows)        

21              {                

22              // 获得此模型的公共属性                

23                  PropertyInfo[] propertys = t.GetType().GetProperties();                  

24                  foreach (PropertyInfo pi in propertys)              

25                  {                     tempName = pi.Name;         

26                  // 检查DataTable是否包含此列                   

27                      if (dt.Columns.Contains(tempName))                 

28                      {                        

29                      // 判断此属性是否有Setter          

30                      if (!pi.CanWrite) continue;                   

31                      object value = dr[tempName];                    

32                      if (value != DBNull.Value)                        

33                      pi.SetValue(t, value, null);                

34                      }               

35                  }                

36                 ts.Add(t);      

37              }             

38             return ts;   

39          }   

40      } 

41  }  

42  

43  //示例:

44  // 获得查询结果 

45  DataTable dt = DbHelper.ExecuteDataTable(...); 

46  // 把DataTable转换为IList<UserInfo>

47  IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);

 

你可能感兴趣的:(Datatable)