C#将DataTable转化为List<T>

C#将DataTable转化为List<T>

在使用三层架构开发一个网站时,希望把DataTable对象转换为List<T>对象,于是在网上找资料,总结一个比较方便的方法来实现——使用反射。

思路:

  1. 初始化一个List<T>对象
  2. 获取到T所有的属性,初始化一个T对象
  3. 遍历所有属性,如果DataTable中含有相应属性的值则为T对象赋值,如果没有对应的列则检查数据模型是否定义有误(属性名与列名比较时不区分大小写)
  4. 将T对象添加到List<T>对象中

  总体代码:

反射获取到的属性信息

DataTable中的列信息,对比上图,我们会发现,属性中首字母都是大写,而列名则是采用的Camel命名,首字母是小写,但是通过单步调试可以发现 dt.Columns.Contanis(tempName) 的返回值为true,由此可以证明,这样比较时是不区分大小写的

获取到T对象信息

 1         /// <summary>
 2         /// 利用反射将DataTable转换为List<T>对象
 3         /// </summary>
 4         /// <param name="dt">DataTable 对象</param>
 5         /// <returns>List<T>集合</returns>
 6         public static List<T> DataTableToList<T>(DataTable dt) where T :class,new ()
 7         {
 8             // 定义集合
 9             List<T> ts = new List<T>();
10             //定义一个临时变量
11             string tempName = string.Empty;
12             //遍历DataTable中所有的数据行
13             foreach (DataRow dr in dt.Rows)
14             {
15                 T t = new T();
16                 // 获得此模型的公共属性
17                 PropertyInfo[] propertys = t.GetType().GetProperties();
18                 //遍历该对象的所有属性
19                 foreach (PropertyInfo pi in propertys)
20                 {
21                     tempName = pi.Name;//将属性名称赋值给临时变量
22                     //检查DataTable是否包含此列(列名==对象的属性名)
23                     if (dt.Columns.Contains(tempName))
24                     {
25                         //取值
26                         object value = dr[tempName];
27                          //如果非空,则赋给对象的属性
28                          if (value != DBNull.Value)
29                          {
30                              pi.SetValue(t,value,null);
31                          }
32                     }
33                 }
34                 //对象添加到泛型集合中
35                 ts.Add(t);
36             }
37             return ts;
38         }

时间: 2024-10-12 21:02:45

C#将DataTable转化为List<T>的相关文章

DataTable转化为Json数组

在项目中,如果用到Ajax就经常要用到将后台得到的数据比如DataTable转换为Json字符串.在这里向大家分享一个DataTable转Json的方法: 1 public static string DtToSON(DataTable dt) 2 { 3 StringBuilder jsonBuilder = new StringBuilder(); 4 jsonBuilder.Append("["); 5 for (int i = 0; i < dt.Rows.Count;

C#中DataTable转化为List&lt;T&gt;解析

在.net项目中使用到DataTable和List<T>集合的地方较多, 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力和灵活性.不会强行对值类型进行装箱和拆箱,或对引用类型进行.当涉及到两者之间的转换时,就显得有些较为繁琐.这个其中的问题主要在两者的存储方式,DataTable的存储方式采用一种二维表的方式进行数据的存储操作,DataTable表示内存中数据的一个表.在List集合中,List的本质就是一个数组,则采用一种线性结构对数据进行存储. 在转换过程中,主要的问题在于

将DataTable转化为json对象

private string DataTableTojson(DataTable dt)        {             List> list=new List>();             foreach (DataRow rows in dt.Rows)             {                 Dictionary dict = new Dictionary();                 foreach (DataColumn col in dt.C

将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList

1 public IList GetModelList(string tablename, string where) 2 { 3 IList list = null; 4 DataTable dataTable = new DataTable(); 5 string sql = "select * from " + tablename; 6 if (where != "") 7 { 8 sql += " Where " + where; 9 }

将DataTable转换成CSV文件

DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记.CSV文件是个纯文本文件,每一行表示一张图片的许多属性. 在.net项目中运用C#将DataTable转化为CSV文件,现在提供一个较为通用的方法,具体代码如下:         /// <summary>         /// 将DataTable转换成CSV文件         /// &

DataTable 获取列名 DataTable批量更新至数据库

好久没写东西了,这几个月也没下功夫钻研技术,愧疚啊.说下最近刚学会的DataTable 的用法吧,新手适合看下. 1 DataTable 获取列名 在处理数据的时候大家都会用到模型,从datatable遍历数据的时候可以用datatable的columns属性获取列名,然后就可以动态的用datatable 生成一个josn字符串,然后再讲json字符串转化成你想要的model,是不是很方便?. 下面是将datatable转化为json数组的方法. private string DataTable

使用NPOI将DataTable生成Excel

听闻npoi 2.0版本支持excel2007格式了,表示期待其表现.不过目前还是使用1.2.5稳重点. 生活中有太多的列表都需要一个导出功能,当然这里的生活指的的程序员的生活.DataTable是从数据库读取数据后常用的数据结构,又当然这里的DataTable是指.Net开发下的.今天刚好做了个导出excel的功能,于是乎就在完成功能后把该方法抽离出来做成一个类,以备后用.整个类如下: using System; using System.Collections.Generic; using

C#.net开发 List与DataTable相互转换

在.NET开发中,操作关系型数据库提取数据经常用到DataTable.ASP.NET前后台数据绑定应用DataTable的时候似乎也很多,但是List集合比DataTable应用更加广泛,提取处理数据也更加方便,MVC绑定数据更倾向于List. 因此,我们会经常需要对List集合和DataTable数据进行互转,以下三个方法是实现List和DataTable互转,以及DataTable单行提取对象.好了,直接上代码了: 1.DataTable转List集合 /// <summary> /// 

C#.net开发 List与DataTable相互转换 【转】

http://blog.csdn.net/shuizhaoshui/article/details/51425527 在.NET开发中,操作关系型数据库提取数据经常用到DataTable.ASP.NET前后台数据绑定应用DataTable的时候似乎也很多,但是List集合比DataTable应用更加广泛,提取处理数据也更加方便,MVC绑定数据更倾向于List. 因此,我们会经常需要对List集合和DataTable数据进行互转,以下三个方法是实现List和DataTable互转,以及DataTa