首页 > 代码库 > List<T>转DataTable

List<T>转DataTable

  泛型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 = http://www.mamicode.com/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的字段不是一样的,只能是每个实体类写一个相应的方法,代码不是很高明,网上各种例子也有,希望可以和大家一起学习

 

List<T>转DataTable