1. public class ConvertX
  2. {
  3. #region 将集合类转换成DataTable
  4.  
  5. /// <summary>
  6. /// 将集合类转换成DataTable
  7. /// </summary>
  8. /// <param name="list">集合</param>
  9. /// <returns></returns>
  10. public static System.Data.DataTable ToDataTable(IList list)
  11. {
  12. DataTable result = new DataTable();
  13. if (list.Count > 0)
  14. {
  15. PropertyInfo[] propertys = list[0].GetType().GetProperties();
  16. foreach (PropertyInfo pi in propertys)
  17. {
  18. result.Columns.Add(pi.Name, pi.PropertyType);
  19. }
  20.  
  21. for (int i = 0; i < list.Count; i++)
  22. {
  23. ArrayList tempList = new ArrayList();
  24. foreach (PropertyInfo pi in propertys)
  25. {
  26. object obj = pi.GetValue(list[i], null);
  27. tempList.Add(obj);
  28. }
  29. object[] array = tempList.ToArray();
  30. result.LoadDataRow(array, true);
  31. }
  32. }
  33. return result;
  34. }
  35.  
  36. #endregion
  37.  
  38. #region 将泛型集合类转换成DataTable
  39.  
  40. /// <summary>
  41. /// 将泛型集合类转换成DataTable
  42. /// </summary>
  43. /// <typeparam name="T">集合项类型</typeparam>
  44. /// <param name="list">集合</param>
  45. /// <returns>数据集(表)</returns>
  46. public static DataTable ToDataTable<T>(IList<T> list)
  47. {
  48. return ToDataTable<T>(list, null);
  49. }
  50.  
  51. /// <summary>
  52. /// 将泛型集合类转换成DataTable
  53. /// </summary>
  54. /// <typeparam name="T">集合项类型</typeparam>
  55. /// <param name="list">集合</param>
  56. /// <param name="propertyName">需要返回的列的列名(比如你的表格里面有Name和其他列名,但是这里只写了Name就只返回Name这一列的所有数据)</param>
  57. /// <returns>数据集(表)</returns>
  58. public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
  59. {
  60. List<string> propertyNameList = new List<string>();
  61. if (propertyName != null)
  62. propertyNameList.AddRange(propertyName);
  63.  
  64. DataTable result = new DataTable();
  65. if (list.Count > 0)
  66. {
  67. PropertyInfo[] propertys = list[0].GetType().GetProperties();
  68. foreach (PropertyInfo pi in propertys)
  69. {
  70. if (propertyNameList.Count == 0)
  71. {
  72. result.Columns.Add(pi.Name, pi.PropertyType);
  73. }
  74. else
  75. {
  76. if (propertyNameList.Contains(pi.Name))
  77. result.Columns.Add(pi.Name, pi.PropertyType);
  78. }
  79. }
  80.  
  81. for (int i = 0; i < list.Count; i++)
  82. {
  83. ArrayList tempList = new ArrayList();
  84. foreach (PropertyInfo pi in propertys)
  85. {
  86. if (propertyNameList.Count == 0)
  87. {
  88. object obj = pi.GetValue(list[i], null);
  89. tempList.Add(obj);
  90. }
  91. else
  92. {
  93. if (propertyNameList.Contains(pi.Name))
  94. {
  95. object obj = pi.GetValue(list[i], null);
  96. tempList.Add(obj);
  97. }
  98. }
  99. }
  100. object[] array = tempList.ToArray();
  101. result.LoadDataRow(array, true);
  102. }
  103. }
  104. return result;
  105. }
  106.  
  107. #endregion
  108. }

实际调用方式

1:返回所有的列

  1. DataTable dt = ConvertX.ToDataTable<PersonInfo>(list);

2:返回部分的列,这个后面的参数是指: 需要返回的列的列名(比如你的集合里面有Name和其他列名,但是这里只写了Name就只返回Name这一列的所有数据

  1. DataTable dt = ConvertX.ToDataTable<PersonInfo>(list, "Name");

这个看在自己的类库里面  例如  Common层的 ConvertX 类,专门用于什么转换之类的

List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable的更多相关文章

  1. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  2. DataTable转任意类型对象List数组-----工具通用类(利用反射和泛型)

    public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summa ...

  3. 反射List<M> To DataTable|反射IList To DataTable|反射 DataTable To List<M>

    将DataTable集合反射获取 List<M> /// <summary> /// 根据DataTable集合反射获取 List<M> /// </summ ...

  4. 利用反射,泛型,静态方法快速获取表单值到Model

    在项目中经常需要处理表单,给model赋值,很烦人的一些重复代码.如下边的代码: News news = new News(); news.Id = int.Parse(Request.Form[&q ...

  5. java 反射和泛型

    反射 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力.[1]用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为. 要注意术 ...

  6. 深入分析Java反射(三)-泛型

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  7. Java反射给泛型集合赋值

    Java反射给泛型集合赋值 泛型 Java泛型简单描述下: 比如创建一个List集合,我想在里边只放Student对象信息,就需要写成 List<Student> studentList ...

  8. C#反射の一个泛型反射实现的网络请求框架

    点击下载源码 C#反射の反射详解(点击跳转)C#反射の反射接口(点击跳转)C#反射反射泛型接口(点击跳转)C#反射の一个泛型反射实现的网络请求框架(点击跳转)

  9. java 反射 子类泛型的class

    很早之前写过利用泛型和反射机制抽象DAO ,对其中获取子类泛型的class一直不是很理解.关键的地方是HibernateBaseDao的构造方法中的 Type genType = getClass() ...

随机推荐

  1. 【Spring】Spring,我的零散使用杂记

    通过Java类设置配置信息,JavaConfig Spring常用的通过XML或者@Controller.@Servoce.@Repository.@Component等注解注册Bean,最近看Spr ...

  2. sql2008修改数据库文件名称

    例如我们有数据库a,需修改成b,包括文件名称也修改 1.备份数据a 选择数据库->右键->任务->备份,备份出a.bak 2.右键->任务->还原->数据库,跳出“ ...

  3. 【转】asp.net中@page指令的属性Inherits、Src、CodeBehind区别

    Inherits.Src.CodeBehind 在 ASP.NET 中使用代码隐藏方法来设计Web 窗体,可使页代码能够更清晰地从 HTML 内容中分离到完全单独的文件中. 通常一个 @page 指令 ...

  4. 【神经网络】LSTM 网络

      Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息.LSTM 由Hochreiter & Schmidhuber (199 ...

  5. 06Vue.js快速入门-Vue组件化开发

    组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...

  6. css按钮固定

  7. VC/Wince 实现仿Win8 Metro风格界面1——设计概述和自绘Button(附效果图)

    去年用VC做了一个仿Win8 Metro风格的界面,感觉挺有意思,最近打算把实现过程和一些技术原理记录下来. 主要是风格上类似Win8,其实功能上很多借鉴了Android的操作方式.界面只支持两种大小 ...

  8. [转]handsontable常规配置的中文API

    原文地址:http://blog.csdn.net/mafan121/article/details/46050049 常规配置: 1.固定行列位置 fixedRowsTop:行数 //固定顶部多少行 ...

  9. ubuntu 12.04下编译安装nginx-1.9.3

    1,下载nginx-1.9.3.tar.gz 两种方式: (1).ubuntu 下终端中(ctrl+alt+t) 运行命令: wget http://nginx.org/download/nginx- ...

  10. python使用selenium

    首先安装 pip install selenium 测试抓取baidu,其中的chromedriver.exe需要自己下载,百度有很多的 import timefrom selenium import ...