zoukankan      html  css  js  c++  java
  • linq之将IEnumerable<T>类型的集合转换为DataTable类型 (转载)

    在考虑将表格数据导出成excel的时候,网上搜的时候找到一个特别合适的公共方法,可以将query查询出来的集合转换为datatable

    需引用using System.Reflection;

     1 public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
     2         {   //定义要返回的DataTable对象
     3             DataTable dtReturn = new DataTable();
     4             // 保存列集合的属性信息数组
     5             PropertyInfo[] oProps = null;
     6             if (varlist == null) return dtReturn;//安全性检查
     7             //循环遍历集合,使用反射获取类型的属性信息
     8             foreach (T rec in varlist)
     9             {
    10                 //使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
    11                 if (oProps == null)
    12                 {
    13                     oProps = ((Type)rec.GetType()).GetProperties();
    14                     //循环PropertyInfo数组
    15                     foreach (PropertyInfo pi in oProps)
    16                     {
    17                         Type colType = pi.PropertyType;//得到属性的类型
    18                         //如果属性为泛型类型
    19                         if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
    20                         == typeof(Nullable<>)))
    21                         {   //获取泛型类型的参数
    22                             colType = colType.GetGenericArguments()[0];
    23                         }
    24                         //将类型的属性名称与属性类型作为DataTable的列数据
    25                         dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
    26                     }
    27                 }
    28                 //新建一个用于添加到DataTable中的DataRow对象
    29                 DataRow dr = dtReturn.NewRow();
    30                 //循环遍历属性集合
    31                 foreach (PropertyInfo pi in oProps)
    32                 {   //为DataRow中的指定列赋值
    33                     dr[pi.Name] = pi.GetValue(rec, null) == null ?
    34                         DBNull.Value : pi.GetValue(rec, null);
    35                 }
    36                 //将具有结果值的DataRow添加到DataTable集合中
    37                 dtReturn.Rows.Add(dr);
    38             }
    39             return dtReturn;//返回DataTable对象
    40         }
    View Code

    转载地址:http://www.cnblogs.com/yangtongnet/archive/2010/07/06/1772314.html

  • 相关阅读:
    重学计算机组成原理(七)- 程序无法同时在Linux和Windows下运行?
    学习ConcurrentHashMap并发写机制
    Unsafe中CAS的实现
    LinkedHashMap源码解读
    Hashset源码分析
    复盘MySQL分页查询优化方案
    Java面试必问之Hashmap底层实现原理(JDK1.8)
    Java面试必问之Hashmap底层实现原理(JDK1.7)
    Docker实战之Kafka集群
    Docker实战之Zookeeper集群
  • 原文地址:https://www.cnblogs.com/hanazawalove/p/6112619.html
Copyright © 2011-2022 走看看