• DataTable转换为List<Model>的通用类


     1 using System;  
     2 using System.Collections.Generic;  
     3 using System.Text;  
     4 using System.Data;  
     5 using System.Reflection;  
     6   
     7 namespace NCL.Data  
     8 {  
     9     /// <summary>  
    10     /// 实体转换辅助类  
    11     /// </summary>  
    12     public class ModelConvertHelper<T> where  T : new()  
    13     {  
    14         public static IList<T> ConvertToModel(DataTable dt)  
    15         {  
    16             // 定义集合  
    17             IList<T> ts = new List<T>();  
    18   
    19             // 获得此模型的类型  
    20             Type type = typeof(T);  
    21   
    22             string tempName = "";  
    23   
    24             foreach (DataRow dr in dt.Rows)  
    25             {  
    26                 T t = new T();  
    27   
    28                 // 获得此模型的公共属性  
    29                 PropertyInfo[] propertys = t.GetType().GetProperties();  
    30   
    31                 foreach (PropertyInfo pi in propertys)  
    32                 {  
    33                     tempName = pi.Name;  
    34   
    35                     // 检查DataTable是否包含此列  
    36                     if (dt.Columns.Contains(tempName))  
    37                     {  
    38                         // 判断此属性是否有Setter  
    39                         if (!pi.CanWrite) continue;  
    40   
    41                         object value = dr[tempName];  
    42                         if (value != DBNull.Value)  
    43                             pi.SetValue(t, value, null);  
    44                     }  
    45                 }  
    46   
    47                 ts.Add(t);  
    48             }  
    49   
    50             return ts;  
    51   
    52         }  
    53     }  
    54 }  

     1   public static List<T> ConvertToModel(DataTable dt)
     2             {
     3                 if (dt == null || dt.Rows.Count == 0)
     4                 {
     5                     return null;
     6                 }
     7                 List<T> ts = new List<T>();
     8 
     9                 Type type = typeof(T);
    10                 string tempName = "";
    11 
    12                 foreach (DataRow dr in dt.Rows)
    13                 {
    14                     T t = new T();
    15 
    16                     PropertyInfo[] propertys = t.GetType().GetProperties();
    17                     foreach (PropertyInfo pi in propertys)
    18                     {
    19                         tempName = pi.Name;
    20 
    21                         if (dt.Columns.Contains(tempName))
    22                         {
    23 
    24                             if (!pi.CanWrite)
    25                             {
    26                                 continue;
    27                             }
    28 
    29                             object value = dr[tempName];
    30                             setValue(ref t, pi, value);
    31                         }
    32                     }
    33                     ts.Add(t);
    34                 }
    35                 return ts;
    36             }

    使用方式:

    // 获得查询结果
    DataTable dt = DbHelper.ExecuteDataTable(...);
    // 把DataTable转换为IList<UserInfo>
    IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);

  • 相关阅读:
    公共开发中js代码的管理
    利用kibana插件对Elasticsearch进行映射
    利用kibana插件对Elasticsearch进行批量操作
    利用kibana插件对Elasticsearch进行文档和索引的CRUD操作
    elasticsearch搜索框架的安装相关
    python面试必问 知识整理
    Selenium定位不到元素的解决方法—iframe挡住了去路
    python 几个简单算法详解
    爬虫突破封禁常用方法
    转载:使用Tornado+Redis维护ADSL拨号服务器代理池
  • 原文地址:https://www.cnblogs.com/suan1717/p/7117651.html
Copyright © 2020-2023  润新知