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

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

DataTable转换为List<Model>的通用类,布布扣,bubuko.com

时间: 2024-10-12 23:57:25

DataTable转换为List<Model>的通用类的相关文章

datatable转换为list&lt;model&gt; 映射

using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text; namespace PORM.Data { /// <summary> /// 常用映射关系帮助类 /// </summary> public class CommonMap { /// <summary> ///

DataTable转List&lt;Model&gt;通用类

/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class ModelConvertHelper<T> where T : new() { public static IList<T> ConvertToModel(DataTable dt) { // 定义集合 IList<T> ts = new List<T>(); //

将DataTable转换为List,将List转换为DataTable的实现类

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Xmh.DBUnit { /// <summary> /// 将DataTable转换为List,将

我写的一个ExcelHelper通用类,可用于读取或生成数据

读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三方组件(比如:NPOI),优点:无需安装OFFICE软件,缺点:需要引入第三方组件,当然这个还是比较强的 3.通过把EXCEL当成数据库,连接后运用SQL语句读取,写入的话就自行拼接成HTML表格,优点:无需另外的组件,缺点:需要会SQL及拼接HTML表格较麻烦: 三种方法我都有用过,若开发BS网站

dal层通用类

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;using System.Reflection;using BaseLibrary; namespace DAL{ /// <summary> /// 通用类 /// </summary> public class commonH

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </sum

Datatable转换为Json 然后把Json数据放入 js 文件中

C#中把Datatable转换为Json的5个代码实例 /// <summary> /// Datatable转换为Json /// </summary> /// <param name="table">Datatable对象</param> /// <returns>Json字符串</returns> public static string ToJson(DataTable dt) { StringBuilde

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类 本节导读:本节主要介绍通过序列化接口IXmlSerializable实现XML序列化和反序列化,整理了XML基础操作及序列化的通用类(包括XML及节点的基础读写操作,XML到DataSet\DataTable互转换操作,XML序列化及反序列化通用方法等). 读前必备: A.类和类的实例 [.net 面向对象编程基础]  (9) 类和类的

数据库操作通用类

DataBase.java 说明: 1. 此类包含对数据库的查询,删除,更新操作.     2. 可以实现对大文本对象的增删改.     3. 利用自建的数据库连接池类, 得到数据库连接.     4. 可以利用Tomcat 自带的连接池, 得到数据库连接 变量:     1. 数据库连接 变量名     : conn 应用范围   : protect 变量类型   : Connection 数据库连接 初始值     : null 是否Static :  否     2. 声明语句 变量名