在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有list<T>检索方便。但是数据以ILIST形式返回,就为我们在.NET中使用传统的数据绑定造成了不便。下面介绍datatable和list的相互转换

1.datatable转换为list

  1. public List<T> GetList<T>(DataTable table)
  2. {
  3. List<T> list = new List<T>();
  4. T t = default(T);
  5. PropertyInfo[] propertypes = null;
  6. string tempName = string.Empty;
  7. foreach (DataRow row in table.Rows)
  8. {
  9. t = Activator.CreateInstance<T>();
  10. propertypes = t.GetType().GetProperties();
  11. foreach (PropertyInfo pro in propertypes)
  12. {
  13. tempName = pro.Name;
  14. if (table.Columns.Contains(tempName))
  15. {
  16. object value = row[tempName];
  17. if (!value.ToString().Equals(""))
  18. {
  19. pro.SetValue(t, value, null);
  20. }
  21. }
  22. }
  23. list.Add(t);
  24. }
  25. return list.Count == ? null : list;
  26. }

2.list转换为datatable

  1. public DataSet ConvertToDataSet<T>(IList<T> list)
  2. {
  3. if (list == null || list.Count <= )
  4. {
  5. return null;
  6. }
  7.  
  8. DataSet ds = new DataSet();
  9. DataTable dt = new DataTable(typeof(T).Name);
  10. DataColumn column;
  11. DataRow row;
  12.  
  13. System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
  14.  
  15. foreach (T t in list)
  16. {
  17. if (t == null)
  18. {
  19. continue;
  20. }
  21.  
  22. row = dt.NewRow();
  23.  
  24. for (int i = , j = myPropertyInfo.Length; i < j; i++)
  25. {
  26. System.Reflection.PropertyInfo pi = myPropertyInfo[i];
  27.  
  28. string name = pi.Name;
  29.  
  30. if (dt.Columns[name] == null)
  31. {
  32. column = new DataColumn(name, pi.PropertyType);
  33. dt.Columns.Add(column);
  34. }
  35.  
  36. row[name] = pi.GetValue(t, null);
  37. }
  38.  
  39. dt.Rows.Add(row);
  40. }
  41.  
  42. ds.Tables.Add(dt);
  43.  
  44. return ds;
  45. }
备注
 
以上转换,由于使用泛型,所以要求调用时,list对应的属性定义必须跟datatable的属性一致。不然可能会导致转换后,数据丢失。

datatable和list的转换的更多相关文章

  1. [C#]Datatable和json互相转换操作

    #region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...

  2. 利用反射实现DataTable 与 List<T> 转换

    今天上班不太忙,就想着总结一下反射.扩展方法.以及lambda表达式的用法,自己就写了个小DEMO记录一下,希望各位大牛们看到后觉得不对的地方请及时提出.这篇文章中我只说明我的用法,作为一个备忘,基本 ...

  3. Datatable转实体 实体转换辅助类

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...

  4. datatable to list 方法转换

    #region 实体转换 /// <summary> /// add extension method for datable /// </summary> /// <p ...

  5. C#中Datatable和List互相转换

    其实早就该写的,哈哈,不过今天刚想起来注册,热热手,就写一下,哈哈. 直接上内容吧: 建立一个控制台应用程序, List<students> Studentlist = new List& ...

  6. DataTable 转换为ArrayList 再转换成 json 格式

    //JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();        //javaScriptSeriali ...

  7. DataTable与实体类互相转换

    /// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...

  8. DataTable转换成json字符串

    将DataTable里面的行转换成json字符串方法: #region DataTable转为json /// <summary> /// DataTable转为json /// < ...

  9. XML 与 DataSet/DataTable 互相转换实例(C#)——转载

    // <summary>      /// XML形式的字符串.XML文江转换成DataSet.DataTable格式      /// </summary>      pub ...

随机推荐

  1. Linux下UPnP sample分析

        一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...

  2. Android SQLite调试

    调试SQLite的神器,再也不用自己去打Log了,只需简单的几个命令. adb shell setprop log.tag.SQLiteLog V adb shell setprop log.tag. ...

  3. 关于php语言的使用!

    ------php语言与JavaScript的使用 方法是相似 <script type="text/javascript"> </script>--js与 ...

  4. Java Thread 的 sleep() 和 wait() 的区别

    Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别       1. sleep ...

  5. javascript中的函数式声明与变量式声明

    观察下面两段代码,试写出hello('word');的运行结果: // 变量式声明 function hello(msg){ alert(msg); var msg = function(){}; a ...

  6. 多线程同步工具——CAS原子变量

    这是我参考的一篇文章<基于CAS的乐观锁实现>,讲述的是一种需要CPU支持的执行技术CAS(Compare and Swap). 首先理解什么是原子性操作,意思是不能再拆分的操作,例如改写 ...

  7. 安卓Design之NavigationView的使用

    前面讲解了Design包下的TabLayout的使用,下面将带来NavagationView和DrawLayout以及toolbar的联动. 项目已经同步至:https://github.com/na ...

  8. 你真的会玩SQL吗?透视转换的艺术

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  10. 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...