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);

      

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

  • 相关阅读:
    https://bbs.ichunqiu.com/thread-48915-1-1.html
    如何利用GitHub搜索敏感信息
    PHP7CMS 无条件前台GETSHELL
    S-CMS企建v3二次SQL注入
    浅析PHP正则表达式的利用技巧
    WPF中获得控件相对于控件的相对位置
    WPF 获得鼠标相对于屏幕的位置,相对于控件的位置
    WPF中设置快捷键
    Wpf 中使用gif格式的动态图
    安装window服务
  • 原文地址:https://www.cnblogs.com/JoshuaDreaming/p/1969139.html
Copyright © 2011-2022 走看看