• 从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);
  • 相关阅读:
    不要放弃你的梦想
    ResultSet获得总行数的方法
    MS SQL Server数据库事务锁机制分析
    VS2005学习02Visual Studio® 2005 Team System
    获取打印机
    Download Accelerator PlusDAP
    设置打印机
    sqlserver2005里查询当前锁的状态。
    Excel的单位的转换
    PGP的密匙和口令的安全性问题
  • 原文地址:https://www.cnblogs.com/liwenqiang/p/2519697.html
Copyright © 2020-2023  润新知