zoukankan      html  css  js  c++  java
  • DataTable转换为List<Model>的通用类

    在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便。

    所以很多人都是按照以下方式做的:

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

     

    问题:如果此系统有几十上百个模型,那不是每个模型中都要写个把DataTable转换为此模型的方法吗?
    解决:能不能写个通用类,可以把DataTable转换为任何模型,呵呵,这就需要利用反射和泛型

     

    不多说,核心代码如下,经过测试,性能不错,大家可以根据实际情况改善

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Reflection;

    namespace NCL.Data
    {
        
    /// <summary>
        
    /// 实体转换辅助类
        
    /// </summary>
        public class ModelConvertHelper<T> where  T : new()
        {
            
    public static IList<T> ConvertToModel(DataTable dt)
            {
                
    // 定义集合
                IList<T> ts = new List<T>();

                
    // 获得此模型的类型
                Type type = typeof(T);

                
    string tempName = "";

                
    foreach (DataRow dr in dt.Rows)
                {
                    T t 
    = new T();

                    
    // 获得此模型的公共属性
                    PropertyInfo[] propertys = t.GetType().GetProperties();

                    
    foreach (PropertyInfo pi in propertys)
                    {
                        tempName 
    = pi.Name;

                        
    // 检查DataTable是否包含此列
                        if (dt.Columns.Contains(tempName))
                        {
                            
    // 判断此属性是否有Setter
                            if (!pi.CanWrite) continue;

                            
    object value = dr[tempName];
                            
    if (value != DBNull.Value)
                                pi.SetValue(t, value, 
    null);
                        }
                    }

                    ts.Add(t);
                }

                
    return ts;

            }
        }
    }

    使用方式:

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

     

    呵呵,这样子是不是很方便了,谢谢,希望能给你带来收获!

  • 相关阅读:
    Android kotlin jsoup解析网页html代码
    Android kotlin 判断网络状态
    ASP.NET设计模式笔记1
    C# SMTP发送邮件
    SQL连接数和CPU使用情况查询
    Grafana笔记
    Docker笔记
    solidity学习(四)---storage和memory关键字
    e-book
    solidity学习(四)-- Require(), Assert(), Revert()的用法和区别
  • 原文地址:https://www.cnblogs.com/cj/p/1560627.html
Copyright © 2011-2022 走看看