我用的将集合类转换为DataTable 的方法

        /// <summary>    /// 将集合类转换成DataTable    /// </summary>    /// <param name="list">集合</param>    /// <returns></returns>    private static DataTable ToDataTableTow(IList list){DataTable result = new DataTable();if (list.Count > 0){PropertyInfo[] propertys = list[0].GetType().GetProperties();foreach (PropertyInfo pi in propertys){result.Columns.Add(pi.Name, pi.PropertyType);}foreach (object t in list){ArrayList tempList = new ArrayList();foreach (PropertyInfo pi in propertys){object obj = pi.GetValue(t, null);tempList.Add(obj);}object[] array = tempList.ToArray();result.LoadDataRow(array, true);}}return result;}

将DataTable转换为List<T>

  

    /// <summary>    /// DataTable 转换为List 集合    /// </summary>    /// <typeparam name="TResult">类型</typeparam>    /// <param name="dt">DataTable</param>    /// <returns></returns>    public static List<T> ToList<T>(this DataTable dt) where T : class, new()  {  //创建一个属性的列表    List<PropertyInfo> prlist = new List<PropertyInfo>();  //获取TResult的类型实例  反射的入口
  Type t = typeof(T);  //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表     Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });  //创建返回的集合
  List<T> oblist = new List<T>();  foreach (DataRow row in dt.Rows)  {  //创建TResult的实例    T ob = new T();  //找到对应的数据  并赋值    prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });  //放入到返回的集合中.
            oblist.Add(ob);  }  return oblist;  }  

其它的实现方式

  

    /// <summary>     /// 转化一个DataTable    /// </summary>      /// <typeparam name="T"></typeparam>    /// <param name="list"></param>    /// <returns></returns>    public static DataTable ToDataTable<T>(this IEnumerable<T> list)  {    //创建属性的集合    List<PropertyInfo> pList = new List<PropertyInfo>();  //获得反射的入口    Type type = typeof(T);  DataTable dt = new DataTable();  //把所有的public属性加入到集合 并添加DataTable的列    Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });  foreach (var item in list)  {  //创建一个DataRow实例    DataRow row = dt.NewRow();  //给row 赋值    pList.ForEach(p => row[p.Name] = p.GetValue(item, null));  //加入到DataTable
            dt.Rows.Add(row);  }  return dt;  } 

返回指定的列

  

 /// <summary>    /// 将泛型集合类转换成DataTable    /// </summary>    /// <typeparam name="T">集合项类型</typeparam>    /// <param name="list">集合</param>    /// <returns>数据集(表)</returns>    public static DataTable ToDataTable<T>(IList<T> list)  {  return ToDataTable<T>(list, null);  }  /**/  /// <summary>    /// 将泛型集合类转换成DataTable    /// </summary>    /// <typeparam name="T">集合项类型</typeparam>    /// <param name="list">集合</param>    /// <param name="propertyName">需要返回的列的列名</param>    /// <returns>数据集(表)</returns>    public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)  {  List<string> propertyNameList = new List<string>();  if (propertyName != null)  propertyNameList.AddRange(propertyName);  DataTable result = new DataTable();  if (list.Count > 0)  {  PropertyInfo[] propertys = list[0].GetType().GetProperties();  foreach (PropertyInfo pi in propertys)  {  if (propertyNameList.Count == 0)  {  result.Columns.Add(pi.Name, pi.PropertyType);  }  else  {  if (propertyNameList.Contains(pi.Name))  result.Columns.Add(pi.Name, pi.PropertyType);  }  }  for (int i = 0; i < list.Count; i++)  {  ArrayList tempList = new ArrayList();  foreach (PropertyInfo pi in propertys)  {  if (propertyNameList.Count == 0)  {  object obj = pi.GetValue(list[i], null);  tempList.Add(obj);  }  else  {  if (propertyNameList.Contains(pi.Name))  {  object obj = pi.GetValue(list[i], null);  tempList.Add(obj);  }  }  }  object[] array = tempList.ToArray();  result.LoadDataRow(array, true);  }  }  return result;  }
}  

转载于:https://www.cnblogs.com/a164266729/p/5147456.html

ListT 和DataTable的相互转换相关推荐

  1. 把ListT转换为DataTable

    下面这个学习,把List<T>转换为Datatable. 下面先创建一个对象T: class Ay{private int _ID;public int ID{get { return _ ...

  2. .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较

    转载自http://www.cnblogs.com/jilodream/p/4219840.html (一)HashTable    和Dic    数据结构 Hashtable和Dictionary ...

  3. ListT转换为DataTable

    关于List<T>转换为DataTable的问题一直是开发过程中经常用到的,现从网上整理几个常用的转换方式,留作备用. (尊重作者原创,本文代码转发自 List 与 DataTable 转 ...

  4. ListT to DataTable

    /// <summary> /// 集合装换DataTable /// </summary> /// <param name="list">集合 ...

  5. 技术图文:如何实现 DataTable 与模型类 List 的相互转换?

    通常情况下,我们在做工程项目的时候,需要把待处理的数据存储在数据库中. 通过 SQL 的 Select 语句很容易把查询的结果以 DataTable 的方式得到,但在对 DateTable 中的数据进 ...

  6. C# DataTable 转换成ListT

    运用泛型和反射实现的转换,很给力.代码中掺杂详尽注释,稍微了解一下泛型和反射便可以了解转换的实质.可以直接复制粘贴进行调用哦. public class DtConverToList<T> ...

  7. DataTable / DataSet 与 xml 的相互转换

    之前做DataTable和DataSet转xml一直使用XmlSerializer 序列化完成.今天发现新方法,哇咔咔方便了很多.还不用担心Name为空时报错 1 static void Main(s ...

  8. ilistT 与listT 之间的相互转换

    ilist<T> 与list<T> 之间的相互转换 1>  将list<T>转化为ilist<T> 代码 #region 转化list为ilist ...

  9. DataTable 转为ListT集合

    public static List<T> HubbleTableToList<T>(this DataTable dt) where T:Class { List<T& ...

  10. 反射小应用之DataTable和ListT互操作

    反射小应用之DataTable和List<T>互操作 在程序中,往往会遇到一些小情况,就是数据库取出来的时候为了方便直接将数据通过存储在DataSet或DataTable中,这样做的一个后 ...

最新文章

  1. C#Winform自动检测版本更新,下载最新版本
  2. puppet原理及配置
  3. namespace mismatch错误处理方法
  4. kubernetes学习笔记之七:Ingress-nginx部署使用
  5. 转存储过程实现分页1
  6. Go语言学习笔记(8)——包和结构体
  7. IE无法打开新链接的问题
  8. win10计算机策略禁止用户安装,win10系统软件无法安装显示被组策略阻止的操作办法...
  9. 电脑bluescreen蓝屏解决方法
  10. VS2010扩展VAX的安装使用
  11. 计算机网络实验三—— Cisco Packet Tracer 实验
  12. SDN控制器Floodlight源码学习(五)--控制器和交换机交互(3)
  13. 中国电子竞技产业研究报告
  14. 远程计算机一键休眠,nuc8i5远程登录-windows10频繁自动休眠解决方案
  15. MQTT-轻量级的物联网消息传输协议
  16. 数据中心服务器机柜内的信息点数
  17. Sql 查询学生成绩表中每个科目的最高分及对应科目和学生
  18. 《MongoDB》 数组操作
  19. html5 表格 在线生成,专业的Web报表软件——在线表格生成制作工具
  20. Pyqt5的tableWidget的单元格控件居中

热门文章

  1. layer icon对应图标
  2. 小D课堂 - 新版本微服务springcloud+Docker教程_6-05 高级篇幅之高并发情况下
  3. 解决(Missing artifact com.oracle:ojdbc14:jar:11.2.0.4.0)
  4. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_06maven标准目录结构...
  5. 自己动手写CPU之第七阶段(2)——简单算术操作指令实现过程
  6. 【原】涉及数据库的单元测试-JTeser
  7. godaddy 安装 ssl
  8. ibatis的ibatorForEclipse的安装与配置和ibator的错误日志查看
  9. Migrate to vc8(vs2005)
  10. C# 线程thread