标签:
泛型List<T>在C#中的作用越来越大,如果把SQL语句的结果直接转化成List<T>,效率会非常明显,但是微软给我的提供的SQL结果集为DataSet,所以我们如果想用泛型作为数据集的话,就需要把DataSet转换成List<T>类型。
首先我们要把DataSet中的DataTable取出来,DataSet属于DataTable集合,通过索引或者TableName都可以把DataTable取出来,DataTable里有多个列就是数据库中表的字段,用来映射实体类中的属性变量,我们从DataTable中每行数据的属性赋值给实体类字段就可以了,微软有相关的方法,获取实体类的属性集合:
PropertyInfo[] properties=(new T).GetType().GetProperties();
再把DataTable里的数据赋值给此实体类对象:
properties.SetValue((new T), value, null);这样就给其中的一个属性赋值了,但是我们需要把每个属性都赋值,这时候需要通过遍历属性集合了
举一个整体例子:
1 public List<Base_Room> GetBaseRoomList(DataTable dt) 2 { 3 List<Base_Room> list = new List<Base_Room>(); 4 string tempName = string.Empty; 5 foreach (DataRow dr in dt.Rows) 6 { 7 Base_Room Room = new Base_Room(); 8 PropertyInfo[] properties = Room.GetType().GetProperties(); 9 foreach (PropertyInfo property in properties) 10 { 11 tempName = property.Name;//属性名称 12 if (dt.Columns.Contains(tempName)) 13 { 14 if (!property.CanWrite) 15 { 16 continue; 17 } 18 object value = dr[tempName];//属性值 19 if (value != DBNull.Value) 20 { 21 property.SetValue(Room, value, null); 22 } 23 } 24 } 25 list.Add(Room); 26 } 27 return list; 28 }
我是以其中的某个实体类作为例子,因为每个DataTable的字段不是一样的,只能是每个实体类写一个相应的方法,代码不是很高明,网上各种例子也有,希望可以和大家一起学习
标签:
原文地址:http://www.cnblogs.com/yangsong/p/4226255.html