zoukankan      html  css  js  c++  java
  • 将list完美转换成datatable

     新年将至也没啥心思工作了,打算对一下项目中常用的工具类做一个整理,温故而知新。

     1  public static class DataTableExtensions
     2     {
     3        
     4         /// <summary>
     5         /// List 转换成Datatable
     6         /// </summary>
     7         /// <typeparam name="T"></typeparam>
     8         /// <param name="t"></param>
     9         /// <returns></returns>
    10         public delegate object[] CreateRowDelegate<T>(T t);
    11         static public DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate<T> fn)
    12         {
    13           //存表的列名
    14             DataTable dtReturn = new DataTable();
    15 
    16             // 访问属性元素
    17             PropertyInfo[] oProps = null;
    18 
    19             // 判断属性元素大于0就遍历
    20 
    21             foreach (T rec in varlist)
    22             {
    23 
    24                 // 用反射来获取属性名,创建表,只执行第一次
    25                 if (oProps == null)
    26                 {
    27               //得到公有属性
    28                     oProps = ((Type)rec.GetType()).GetProperties();
    29               //遍历属性中的数据
    30                     foreach (PropertyInfo pi in oProps)
    31                     {
    32               //获取属性的名称与类型   
    33 
    34 
    35                         Type colType = pi.PropertyType; 
    36 
    37             if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
    38                         {
    39 
    40                             colType = colType.GetGenericArguments()[0];
    41 
    42                         }
    43                         
    44                         dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
    45 
    46                     }
    47 
    48                 }
    49         //将数据填充到行中
    50                 DataRow dr = dtReturn.NewRow(); 
    51                 foreach (PropertyInfo pi in oProps)
    52                 {
    53 
    54                     dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
    55 
    56                 }
    57 
    58                 dtReturn.Rows.Add(dr);
    59 
    60             }
    61 
    62             return (dtReturn);
    63 
    64         }
    65         
    66     }

    调用:

        DataTable dt = DataTableExtensions.ToDataTable(list, c => new object[] { list });
    
  • 相关阅读:
    lintcode-60-搜索插入位置
    lintcode-57-三数之和
    lintcode-55-比较字符串
    lintcode-52-下一个排列
    lintcode-51-上一个排列
    lintcode-49-字符大小写排序
    lintcode-47-主元素 II
    lintcode-45-最大子数组差
    lintcode-44-最小子数组
    Charles抓包
  • 原文地址:https://www.cnblogs.com/li-lun/p/5179289.html
Copyright © 2011-2022 走看看