码迷,mamicode.com
首页 > 其他好文 > 详细

List<T>转DataTable

时间:2015-01-15 15:32:29      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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

 

List<T>转DataTable

标签:

原文地址:http://www.cnblogs.com/yangsong/p/4226255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!