zoukankan      html  css  js  c++  java
  • 从DataTable到List<Model>(C#.net)

    平时做业务设计的时候,总是离不了建立各种实体模型Model,但一般这些模型都需要从查询结果DataTable生成,

    一般的写法是:为每一个模型编写一个方法,实现DataTable到Model的转换。

    但这个方法有一些问题:

     (1)工作效率低:要为每个属性编写赋值语句,工作重复。

    (2)代码重用性差:不同的类有不同的属性,这个Model转换不能够用于另一个Model的转换

    (3)DataTable字段检测费力:每一次属性赋值都要写个判断,以确定这个Field字段是否存在,它的值是否是否合法,检测费力

    解决:利用反射和泛型,写一个通用类,实现这个转换过程。(下面是网上找的代码,是正确的。这个方法我自己也写了,只是没别人写的规范,就拿别人的用用吧

    View Code
     1 using System;
     2 using System.Collections.Generic; 
     3 using System.Text; 
     4 using System.Data; 
     5 using System.Reflection;   
     6 namespace NCL.Data 
     7 {     
     8     /// <summary>     
     9     /// 实体转换辅助类     
    10     /// </summary>     
    11     public class ModelConvertHelper<T> where  T : new()     
    12     {        
    13          public static IList<T> ConvertToModel(DataTable dt)
    14          {            
    15              // 定义集合             
    16              IList<T> ts = new List<T>();
    17              // 获得此模型的类型            
    18              Type type = typeof(T); 
    19              string tempName = "";             
    20              foreach (DataRow dr in dt.Rows)        
    21              {                
    22              // 获得此模型的公共属性                
    23                  PropertyInfo[] propertys = t.GetType().GetProperties();                  
    24                  foreach (PropertyInfo pi in propertys)              
    25                  {                     tempName = pi.Name;         
    26                  // 检查DataTable是否包含此列                   
    27                      if (dt.Columns.Contains(tempName))                 
    28                      {                        
    29                      // 判断此属性是否有Setter          
    30                      if (!pi.CanWrite) continue;                   
    31                      object value = dr[tempName];                    
    32                      if (value != DBNull.Value)                        
    33                      pi.SetValue(t, value, null);                
    34                      }               
    35                  }                
    36                 ts.Add(t);      
    37              }             
    38             return ts;   
    39          }   
    40      } 
    41  }  
    42  
    43  //示例:
    44  // 获得查询结果 
    45  DataTable dt = DbHelper.ExecuteDataTable(...); 
    46  // 把DataTable转换为IList<UserInfo>
    47  IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);
  • 相关阅读:
    程序员父亲的遗产——编程十诫 转载
    如何跟程序员谈一场没有Bug的恋爱
    java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
    CentOS7.0下载各版本说明 新增Everything版
    Virtualbox虚拟机安装CentOS 6.5图文详细教程
    s:iterator数据累加示例代码
    关于程序员的59条搞笑但却真实无比的编程语录
    jQuery EasyUI API 中文文档
    Java发送带html标签内容的邮件
    javascript比较两个时间大小
  • 原文地址:https://www.cnblogs.com/liwenqiang/p/2519697.html
Copyright © 2011-2022 走看看