在开发中,把查询结果以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);

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

最新文章

  1. C#初学单例模式
  2. [转]NPOI导出EXCEL 打印设置分页及打印标题
  3. 【131031】jsp学习实例 (2013-10-31 15:29:28)
  4. 【kAri OJ 616】Asce的树
  5. Struts2拦截器的应用
  6. [Guava学习笔记]Strings: 字符串处理
  7. (原)在ubuntu 中安装 swi prolog 和 简单的使用
  8. u3d shader使用
  9. pan
  10. MySQL安装--ubuntu
  11. 整体二分(SP3946 K-th Number ZOJ 2112 Dynamic Rankings)
  12. java数据结构之HashSet和HashMap(java核心卷Ⅰ读书笔记)
  13. Python学习day1 初识python&amp;环境安装
  14. Objective-C中Block的常见用法
  15. [Mysql]——通过例子理解事务的4种隔离级别(转)
  16. Android如何实现点击一次返回键返回桌面而不是退出应用
  17. 记ASP.NET 使用 X509Certificate2 出现的一系列问题
  18. java把map转json
  19. Java并发编程原理与实战三十一:Future&amp;FutureTask 浅析
  20. NOIP2018 Day2毒瘤题目

热门文章

  1. Iwpriv工作流程及常用命令使用
  2. web.config配置详细说明
  3. SeleniumIDE与eclipse如何连接使用
  4. 修改Zabbix默认运行账户
  5. [LeetCode] Single Number III ( a New Questions Added today)
  6. mybatis系列-09-订单商品数据模型
  7. Java学习笔记(3)
  8. 在Raspberry Pi上安装XBMC
  9. Mac下的截屏功能
  10. [转]Oracle 操作字符串的函数