DataReader反射泛型对象

      昨天听同学说,要把DataReader对象转成实体对象,要写一个通用的方法。想了下用反射应该可以做到。项目中一般都是用第三方组件来做数据访问层,如,Nhibernate、ef等。于是自己想写个简单例子玩玩。

      其实,实现起来和简单。一个泛型方法搞定。代码如下:

 1     public List<T> ToList<T>(string _sql) where T :class ,new()

 2         {

 3             

 4             using (var conn = new SqlConnection(connStr))

 5             {

 6                 using (var comm = new SqlCommand(_sql, conn))

 7                 {

 8                     conn.Open();

 9                     SqlDataReader dataReader = comm.ExecuteReader();

10                     if (dataReader.HasRows)

11                     {

12                         List<T> dataList = new List<T>();

13                         

14                         while ((dataReader.Read()))

15                         {

16                             T obj = new T();

17                             //获取泛型对象的所有属性

18                             var properties = obj.GetType().GetProperties();

19                             foreach (var property in properties)

20                             {

21                                 for (int i = 0; i < dataReader.FieldCount; i++)

22                                 {

23                                     //查找与属性名称相同的列

24                                     if (dataReader.GetName(i).Equals(property.Name,StringComparison.CurrentCultureIgnoreCase))

25                                     {

26                                         //给新建的obj对象的属性赋值

27                                         property.SetValue(obj,dataReader[i]);

28                                     }

29                                 }

30                             }

31                             dataList.Add(obj);

32                         }

33                         conn.Close();

34                         return dataList;

35                     }

36                   

37                 }

38             }

39             return null;

40         }
View Code


     

      完整代码链接:http://download.csdn.net/detail/ybealq/7767735

你可能感兴趣的:(reader)