• DataSet、DataTable转换List(泛型集合与DataSet互相转换 )


      1 using System.Data;
      2 
      3 using System.Reflection;
      4 
      5 using System.Collections;
      6 
      7 using System.Collections.Generic;
      8 
      9 using System;
     10 
     11 namespace BI.ERP.DAL
     12 {
     13     public class DataSet转换List
     14     {
     15         /// <summary> 
     16 
     17         /// 泛型集合与DataSet互相转换 
     18 
     19         /// </summary> 
     20 
     21         public class IListDataSet
     22         {
     23             /// <summary> 
     24 
     25             /// 集合装换DataSet 
     26 
     27             /// </summary> 
     28 
     29             /// <param name="list">集合</param> 
     30 
     31             /// <returns></returns> 
     32 
     33             /// 2008-08-01 22:08 HPDV2806 
     34 
     35             public static DataSet ToDataSet(IList p_List)
     36             {
     37 
     38                 DataSet result = new DataSet();
     39 
     40                 DataTable _DataTable = new DataTable();
     41 
     42                 if (p_List.Count > 0)
     43                 {
     44 
     45                     PropertyInfo[] propertys = p_List[0].GetType().GetProperties();
     46 
     47                     foreach (PropertyInfo pi in propertys)
     48                     {
     49 
     50                         _DataTable.Columns.Add(pi.Name, pi.PropertyType);
     51 
     52                     }
     53 
     54 
     55 
     56                     for (int i = 0; i < p_List.Count; i++)
     57                     {
     58 
     59                         ArrayList tempList = new ArrayList();
     60 
     61                         foreach (PropertyInfo pi in propertys)
     62                         {
     63 
     64                             object obj = pi.GetValue(p_List[i], null);
     65 
     66                             tempList.Add(obj);
     67 
     68                         }
     69 
     70                         object[] array = tempList.ToArray();
     71 
     72                         _DataTable.LoadDataRow(array, true);
     73 
     74                     }
     75 
     76                 }
     77 
     78                 result.Tables.Add(_DataTable);
     79 
     80                 return result;
     81 
     82             }
     83 
     84 
     85 
     86             /// <summary> 
     87 
     88             /// 泛型集合转换DataSet 
     89 
     90             /// </summary> 
     91 
     92             /// <typeparam name="T"></typeparam> 
     93 
     94             /// <param name="list">泛型集合</param> 
     95 
     96             /// <returns></returns> 
     97 
     98             /// 2008-08-01 22:43 HPDV2806 
     99 
    100             public static DataSet ToDataSet<T>(IList<T> list)
    101             {
    102 
    103                 return ToDataSet<T>(list, null);
    104 
    105             }
    106 
    107 
    108 
    109 
    110 
    111             /// <summary> 
    112 
    113             /// 泛型集合转换DataSet 
    114 
    115             /// </summary> 
    116 
    117             /// <typeparam name="T"></typeparam> 
    118 
    119             /// <param name="p_List">泛型集合</param> 
    120 
    121             /// <param name="p_PropertyName">待转换属性名数组</param> 
    122 
    123             /// <returns></returns> 
    124 
    125             /// 2008-08-01 22:44 HPDV2806 
    126 
    127             public static DataSet ToDataSet<T>(IList<T> p_List, params string[] p_PropertyName)
    128             {
    129 
    130                 List<string> propertyNameList = new List<string>();
    131 
    132                 if (p_PropertyName != null)
    133 
    134                     propertyNameList.AddRange(p_PropertyName);
    135 
    136 
    137 
    138                 DataSet result = new DataSet();
    139 
    140                 DataTable _DataTable = new DataTable();
    141 
    142                 if (p_List.Count > 0)
    143                 {
    144 
    145                     PropertyInfo[] propertys = p_List[0].GetType().GetProperties();
    146 
    147                     foreach (PropertyInfo pi in propertys)
    148                     {
    149 
    150                         if (propertyNameList.Count == 0)
    151                         {
    152 
    153                             // 没有指定属性的情况下全部属性都要转换 
    154 
    155                             _DataTable.Columns.Add(pi.Name, pi.PropertyType);
    156 
    157                         }
    158 
    159                         else
    160                         {
    161 
    162                             if (propertyNameList.Contains(pi.Name))
    163 
    164                                 _DataTable.Columns.Add(pi.Name, pi.PropertyType);
    165 
    166                         }
    167 
    168                     }
    169 
    170 
    171 
    172                     for (int i = 0; i < p_List.Count; i++)
    173                     {
    174 
    175                         ArrayList tempList = new ArrayList();
    176 
    177                         foreach (PropertyInfo pi in propertys)
    178                         {
    179 
    180                             if (propertyNameList.Count == 0)
    181                             {
    182 
    183                                 object obj = pi.GetValue(p_List[i], null);
    184 
    185                                 tempList.Add(obj);
    186 
    187                             }
    188 
    189                             else
    190                             {
    191 
    192                                 if (propertyNameList.Contains(pi.Name))
    193                                 {
    194 
    195                                     object obj = pi.GetValue(p_List[i], null);
    196 
    197                                     tempList.Add(obj);
    198 
    199                                 }
    200 
    201                             }
    202 
    203                         }
    204 
    205                         object[] array = tempList.ToArray();
    206 
    207                         _DataTable.LoadDataRow(array, true);
    208 
    209                     }
    210 
    211                 }
    212 
    213                 result.Tables.Add(_DataTable);
    214 
    215                 return result;
    216 
    217             }
    218 
    219 
    220 
    221             /// <summary> 
    222 
    223             /// DataSet装换为泛型集合 
    224 
    225             /// </summary> 
    226 
    227             /// <typeparam name="T"></typeparam> 
    228 
    229             /// <param name="p_DataSet">DataSet</param> 
    230 
    231             /// <param name="p_TableIndex">待转换数据表索引</param> 
    232 
    233             /// <returns></returns> 
    234 
    235             /// 2008-08-01 22:46 HPDV2806 
    236 
    237             public static IList<T> DataSetToIList<T>(DataSet p_DataSet, int p_TableIndex)
    238             {
    239 
    240                 if (p_DataSet == null || p_DataSet.Tables.Count < 0)
    241 
    242                     return null;
    243 
    244                 if (p_TableIndex > p_DataSet.Tables.Count - 1)
    245 
    246                     return null;
    247 
    248                 if (p_TableIndex < 0)
    249 
    250                     p_TableIndex = 0;
    251 
    252 
    253 
    254                 DataTable p_Data = p_DataSet.Tables[p_TableIndex];
    255 
    256                 // 返回值初始化 
    257 
    258                 IList<T> result = new List<T>();
    259 
    260                 for (int j = 0; j < p_Data.Rows.Count; j++)
    261                 {
    262 
    263                     T _t = (T)Activator.CreateInstance(typeof(T));
    264 
    265                     PropertyInfo[] propertys = _t.GetType().GetProperties();
    266 
    267                     foreach (PropertyInfo pi in propertys)
    268                     {
    269 
    270                         for (int i = 0; i < p_Data.Columns.Count; i++)
    271                         {
    272 
    273                             // 属性与字段名称一致的进行赋值 
    274 
    275                             if (pi.Name.Equals(p_Data.Columns[i].ColumnName))
    276                             {
    277 
    278                                 // 数据库NULL值单独处理 
    279 
    280                                 if (p_Data.Rows[j][i] != DBNull.Value)
    281 
    282                                     pi.SetValue(_t, p_Data.Rows[j][i], null);
    283 
    284                                 else
    285 
    286                                     pi.SetValue(_t, null, null);
    287 
    288                                 break;
    289 
    290                             }
    291 
    292                         }
    293 
    294                     }
    295 
    296                     result.Add(_t);
    297 
    298                 }
    299 
    300                 return result;
    301 
    302             }
    303 
    304 
    305 
    306             /// <summary> 
    307 
    308             /// DataSet装换为泛型集合 
    309 
    310             /// </summary> 
    311 
    312             /// <typeparam name="T"></typeparam> 
    313 
    314             /// <param name="p_DataSet">DataSet</param> 
    315 
    316             /// <param name="p_TableName">待转换数据表名称</param> 
    317 
    318             /// <returns></returns> 
    319 
    320             /// 2008-08-01 22:47 HPDV2806 
    321 
    322             public static IList<T> DataSetToIList<T>(DataSet p_DataSet, string p_TableName)
    323             {
    324 
    325                 int _TableIndex = 0;
    326 
    327                 if (p_DataSet == null || p_DataSet.Tables.Count < 0)
    328 
    329                     return null;
    330 
    331                 if (string.IsNullOrEmpty(p_TableName))
    332 
    333                     return null;
    334 
    335                 for (int i = 0; i < p_DataSet.Tables.Count; i++)
    336                 {
    337 
    338                     // 获取Table名称在Tables集合中的索引值 
    339 
    340                     if (p_DataSet.Tables[i].TableName.Equals(p_TableName))
    341                     {
    342 
    343                         _TableIndex = i;
    344 
    345                         break;
    346 
    347                     }
    348 
    349                 }
    350 
    351                 return DataSetToIList<T>(p_DataSet, _TableIndex);
    352 
    353             }
    354 
    355             // <summary> 
    356 
    357             /// DataTable装换为泛型集合 
    358 
    359             /// </summary> 
    360 
    361             /// <typeparam name="T"></typeparam> 
    362 
    363             /// <param name="p_DataTable">p_DataTable</param> 
    364 
    365 
    366             /// <returns></returns> 
    367 
    368             /// 2008-08-01 22:47 HPDV2806 
    369             public static IList<T> DataTableToIList<T>(DataTable p_DataTable)
    370             {
    371 
    372                 if (p_DataTable == null || p_DataTable.Rows.Count < 0)
    373 
    374                     return null;
    375 
    376                 //DataTable p_Data = p_DataSet.Tables[p_TableIndex];
    377 
    378                 // 返回值初始化 
    379 
    380                 IList<T> result = new List<T>();
    381 
    382                 for (int j = 0; j < p_DataTable.Rows.Count; j++)
    383                 {
    384 
    385                     T _t = (T)Activator.CreateInstance(typeof(T));
    386 
    387                     PropertyInfo[] propertys = _t.GetType().GetProperties();
    388 
    389                     foreach (PropertyInfo pi in propertys)
    390                     {
    391 
    392                         for (int i = 0; i < p_DataTable.Columns.Count; i++)
    393                         {
    394 
    395                             // 属性与字段名称一致的进行赋值 
    396 
    397                             if (pi.Name.Equals(p_DataTable.Columns[i].ColumnName))
    398                             {
    399 
    400                                 // 数据库NULL值单独处理 
    401 
    402                                 if (p_DataTable.Rows[j][i] != DBNull.Value)
    403 
    404                                     pi.SetValue(_t, p_DataTable.Rows[j][i], null);
    405 
    406                                 else
    407 
    408                                     pi.SetValue(_t, null, null);
    409 
    410                                 break;
    411 
    412                             }
    413 
    414                         }
    415 
    416                     }
    417 
    418                     result.Add(_t);
    419 
    420                 }
    421 
    422                 return result;
    423 
    424             }
    425 
    426         }
    427     }
    428 }
    View Code

    调用方法

      #region 
    
              List<Customer_model> CMList = DataSet转换List.IListDataSet.DataTableToIList<Customer_model>(da) as List<Customer_model>;
    
      #endregion
  • 相关阅读:
    第二章 数据类型、变量、和运算符
    第一章
    ActiveMQ点对点的发送和接收
    初探设计模式(1)——工厂模式
    IDEA使用switch传入String编译不通过
    MyBatis日期转换报错
    HTML页面传值问题
    maven配置本地仓库
    Maven的下载及安装
    PHP实现获得一段时间内所在的所有周的时间
  • 原文地址:https://www.cnblogs.com/shanshanlaichi/p/6553594.html
Copyright © 2020-2023  润新知