• List转DataTable


      1 public static class DataTableExtensions
      2 {
      3     /// <summary>  
      4  
      5     /// 转化一个DataTable  
      6  
      7     /// </summary>  
      8  
      9     /// <typeparam name="T"></typeparam>  
     10     /// <param name="list"></param>  
     11     /// <returns></returns>  
     12     public static DataTable ToDataTable<T>(this IEnumerable<T> list)
     13     {
     14  
     15         //创建属性的集合  
     16         List<PropertyInfo> pList = new List<PropertyInfo>();
     17         //获得反射的入口  
     18  
     19         Type type = typeof(T);
     20         DataTable dt = new DataTable();
     21         //把所有的public属性加入到集合 并添加DataTable的列  
     22         Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
     23         foreach (var item in list)
     24         {
     25             //创建一个DataRow实例  
     26             DataRow row = dt.NewRow();
     27             //给row 赋值  
     28             pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
     29             //加入到DataTable  
     30             dt.Rows.Add(row);
     31         }
     32         return dt;
     33     }
     34  
     35  
     36     /// <summary>  
     37     /// DataTable 转换为List 集合  
     38     /// </summary>  
     39     /// <typeparam name="TResult">类型</typeparam>  
     40     /// <param name="dt">DataTable</param>  
     41     /// <returns></returns>  
     42     public static List<T> ToList<T>(this DataTable dt) where T : class, new()
     43     {
     44         //创建一个属性的列表  
     45         List<PropertyInfo> prlist = new List<PropertyInfo>();
     46         //获取TResult的类型实例  反射的入口  
     47  
     48         Type t = typeof(T);
     49  
     50         //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表   
     51         Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
     52  
     53         //创建返回的集合  
     54  
     55         List<T> oblist = new List<T>();
     56  
     57         foreach (DataRow row in dt.Rows)
     58         {
     59             //创建TResult的实例  
     60             T ob = new T();
     61             //找到对应的数据  并赋值  
     62             prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
     63             //放入到返回的集合中.  
     64             oblist.Add(ob);
     65         }
     66         return oblist;
     67     }
     68  
     69  
     70  
     71  
     72     /// <summary>  
     73     /// 将集合类转换成DataTable  
     74     /// </summary>  
     75     /// <param name="list">集合</param>  
     76     /// <returns></returns>  
     77     public static DataTable ToDataTableTow(IList list)
     78     {
     79         DataTable result = new DataTable();
     80         if (list.Count > 0)
     81         {
     82             PropertyInfo[] propertys = list[0].GetType().GetProperties();
     83  
     84             foreach (PropertyInfo pi in propertys)
     85             {
     86                 result.Columns.Add(pi.Name, pi.PropertyType);
     87             }
     88             for (int i = 0; i < list.Count; i++)
     89             {
     90                 ArrayList tempList = new ArrayList();
     91                 foreach (PropertyInfo pi in propertys)
     92                 {
     93                     object obj = pi.GetValue(list[i], null);
     94                     tempList.Add(obj);
     95                 }
     96                 object[] array = tempList.ToArray();
     97                 result.LoadDataRow(array, true);
     98             }
     99         }
    100         return result;
    101     }
    102  
    103  
    104     /**/
    105  
    106     /// <summary>  
    107     /// 将泛型集合类转换成DataTable  
    108  
    109     /// </summary>  
    110     /// <typeparam name="T">集合项类型</typeparam>  
    111  
    112     /// <param name="list">集合</param>  
    113     /// <returns>数据集(表)</returns>  
    114     public static DataTable ToDataTable<T>(IList<T> list)
    115     {
    116         return ToDataTable<T>(list, null);
    117  
    118     }
    119  
    120  
    121     /**/
    122  
    123     /// <summary>  
    124     /// 将泛型集合类转换成DataTable  
    125     /// </summary>  
    126     /// <typeparam name="T">集合项类型</typeparam>  
    127     /// <param name="list">集合</param>  
    128     /// <param name="propertyName">需要返回的列的列名</param>  
    129     /// <returns>数据集(表)</returns>  
    130     public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
    131     {
    132         List<string> propertyNameList = new List<string>();
    133         if (propertyName != null)
    134             propertyNameList.AddRange(propertyName);
    135         DataTable result = new DataTable();
    136         if (list.Count > 0)
    137         {
    138             PropertyInfo[] propertys = list[0].GetType().GetProperties();
    139             foreach (PropertyInfo pi in propertys)
    140             {
    141                 if (propertyNameList.Count == 0)
    142                 {
    143                     result.Columns.Add(pi.Name, pi.PropertyType);
    144                 }
    145                 else
    146                 {
    147                     if (propertyNameList.Contains(pi.Name))
    148                         result.Columns.Add(pi.Name, pi.PropertyType);
    149                 }
    150             }
    151  
    152             for (int i = 0; i < list.Count; i++)
    153             {
    154                 ArrayList tempList = new ArrayList();
    155                 foreach (PropertyInfo pi in propertys)
    156                 {
    157                     if (propertyNameList.Count == 0)
    158                     {
    159                         object obj = pi.GetValue(list[i], null);
    160                         tempList.Add(obj);
    161                     }
    162                     else
    163                     {
    164                         if (propertyNameList.Contains(pi.Name))
    165                         {
    166                             object obj = pi.GetValue(list[i], null);
    167                             tempList.Add(obj);
    168                         }
    169                     }
    170                 }
    171                 object[] array = tempList.ToArray();
    172                 result.LoadDataRow(array, true);
    173             }
    174         }
    175         return result;
    176     }
    177 }
    View Code
  • 相关阅读:
    MongoDB多表关联查询($lookup)
    "在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"
    "在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"
    AI 质检学习报告——实践篇——第二步:实现图片识字
    AI 质检学习报告——实践篇——第二步:实现图片识字
    机器学习——01、机器学习的数学基础1 数学分析
    机器学习——01、机器学习的数学基础1 数学分析
    机器学习——01、机器学习的数学基础1 数学分析
    PaddlePaddle训练营——公开课——AI核心技术掌握——第2章机器能“看”的现代技术
    PaddlePaddle训练营——公开课——AI核心技术掌握——第2章机器能“看”的现代技术
  • 原文地址:https://www.cnblogs.com/zhangShanGui/p/12038563.html
Copyright © 2020-2023  润新知