将DataTable转换为List,将List转换为DataTable的实现类

  1. public static class DataTableHelper
  2. {
  3. public static DataTable ConvertTo<T>(IList<T> list)
  4. {
  5. DataTable table = CreateTable<T>();
  6. Type entityType = typeof(T);
  7. PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
  8. foreach (T item in list)
  9. {
  10. DataRow row = table.NewRow();
  11. foreach (PropertyDescriptor prop in properties)
  12. row[prop.Name] = prop.GetValue(item);
  13. table.Rows.Add(row);
  14. }
  15. return table;
  16. }
  17.  
  18. public static IList<T> ConvertTo<T>(IList<DataRow> rows)
  19. {
  20. IList<T> list = null;
  21. if (rows != null)
  22. {
  23. list = new List<T>();
  24. foreach (DataRow row in rows)
  25. {
  26. T item = CreateItem<T>(row);
  27. list.Add(item);
  28. }
  29. }
  30. return list;
  31. }
  32.  
  33. public static IList<T> ConvertTo<T>(DataTable table)
  34. {
  35. if (table == null)
  36. return null;
  37.  
  38. List<DataRow> rows = new List<DataRow>();
  39. foreach (DataRow row in table.Rows)
  40. rows.Add(row);
  41.  
  42. return ConvertTo<T>(rows);
  43. }
  44.  
  45. //Convert DataRow into T Object
  46. public static T CreateItem<T>(DataRow row)
  47. {
  48. string columnName;
  49. T obj = default(T);
  50. if (row != null)
  51. {
  52. obj = Activator.CreateInstance<T>();
  53. foreach (DataColumn column in row.Table.Columns)
  54. {
  55. columnName = column.ColumnName;
  56. //Get property with same columnName
  57. PropertyInfo prop = obj.GetType().GetProperty(columnName);
  58. try
  59. {
  60. //Get value for the column
  61. object value = (row[columnName].GetType() == typeof(DBNull))
  62. ? null : row[columnName];
  63. //Set property value
  64. if (prop.CanWrite) //判断其是否可写
  65. prop.SetValue(obj, value, null);
  66. }
  67. catch
  68. {
  69. throw;
  70. //Catch whatever here
  71. }
  72. }
  73. }
  74. return obj;
  75. }
  76.  
  77. public static DataTable CreateTable<T>()
  78. {
  79. Type entityType = typeof(T);
  80. DataTable table = new DataTable(entityType.Name);
  81. PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
  82.  
  83. foreach (PropertyDescriptor prop in properties)
  84. table.Columns.Add(prop.Name, prop.PropertyType);
  85.  
  86. return table;
  87. }
  88. }

将DataTable转换为List,将List转换为DataTable的实现类的更多相关文章

  1. LINQ返回DataTable类型 list转dataset 转换为JSON对象

    using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...

  2. C#之DataTable转List与List转Datatable

    闲来无事,只有写代码啦,以下为DataTable转List与List转DataTable的两个方法,主要技术点用到了反射原理: /// <summary> /// 模型转换类 /// &l ...

  3. C# DataTable转List And List转DataTable

    // DataTable转List: IList<HousesEntity> Ilist = TableAndList.ConvertTo<HousesEntity>(dt); ...

  4. “DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用

    “DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用 造成这个错误的原因是,在 ...

  5. 多个不同的表合并到一个datatable中,repeater在绑定datatable

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  6. 将两个列不同的DataTable合并成一个新的DataTable

    /// <summary>         /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable         /// </summary> ...

  7. EasyUI - Datatable转Json and Json转Datatable

    using System; using System.Data; using System.Linq; using System.Collections; using System.Collectio ...

  8. DataSet转换为泛型集合和DataRow 转成 模型类

    public static class TransformToList { /// <summary> /// DataSet转换为泛型集合 /// </summary> // ...

  9. C#给DataTable添加序号、C#给DataTable添加合计、小计

    /// <summary>        /// 给DataTable添加序号        /// </summary>        /// <param name= ...

  10. Datatable的查找和排序(Datatable.Select)

    Datatable  是一种常用的数据结构.数据类型有点类似于数据库中的表结构.在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object. ...

随机推荐

  1. struts的问题

    将SSH框架进行整合的时候,将三者的jar包加入到lib下面,然后测试struts,结果页面显示不出来报404错误,可是路径没有问题 找到罪魁祸首是:原因两个:(1)在未用到spring的时候,先不要 ...

  2. 【Asp.net入门3-01】使用jQuery-创建示例项目

    过去,浏览器除了显示HTML外,很少具有其他功能.因此,早期的Web应用程序需要依赖服务 器端代码来响应用户交互并执行数据操作.Web应用程序的交互依赖HTML表单元素和浏览器向服务 器发送数据的功能 ...

  3. Ansible10:Playbook的角色及包含

    目录 说明 一.Playbook的包含 1.tasks包含 2.handlers包含 3.混合包含 二.角色(roles) 1.创建role 2.引用roles 3.pre_tasks和post_ta ...

  4. python中高阶函数与装饰器(3)

    >>> f = lambda x: x * x>>> f<function <lambda> at 0x101c6ef28> >> ...

  5. 2017 清北济南考前刷题Day 2 morning

    期望得分:100+30+60=190 实际得分:100+30+30=160 T1 最优方案跳的高度一定是单调的 所以先按高度排序 dp[i][j] 跳了i次跳到j 枚举从哪儿跳到j转移即可 #incl ...

  6. JedisCluster实践

    1. Spring中运用JedisCluster http://blog.csdn.net/u010739551/article/details/52438101[spring集成 JedisClus ...

  7. 对一道pwnhub的一点点记录

    一.通过ssh弱口令,建立socket5代理进内网. 1.修改proxychains配置文件vi /etc/proxychains.conf如下: 2.建立ssh隧道:ssh -qTfnN -D 70 ...

  8. js操作控制iframe页面的dom元素

    1.代码1  index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  9. Oracle新建数据库,并导入dmp文件

    1:安装Oracle及新建数据库 Oracle 11g安装图解 http://www.cnblogs.com/qianyaoyuan/archive/2013/05/05/3060471.html h ...

  10. CSS权重的问题

    important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符 1.行内样式,指的是html文档中定义的s ...