.NET基础架构方法—DataTableToList通用方法

p {
display: block;
margin: 3px 0 0 0;
}
-->

.NET架构基础方法—DataTableToList通用方法

我们经常需要将从数据库中所读取的数据以DataTable类型返回,也经常需要遍历DataTable转换为List>T<。我们也经常需要为每一个DataTable转换为List单独编写适合他们数据库架构地方法。下面上代码:

public static class DataTableTools<T> where T : class, new()
    {
        public static List<T> DataTableToList(DataTable dt)
        {
            List<T> list = null;
            var rowCount = dt.Rows.Count;
            if (rowCount > 0)
            {
                list = new List<T>();
                int i;
                for (i = 0; i < rowCount; i++)
                {
                    T model = DataRowToModel(dt.Rows[i]);
                    list.Add(model);
                }
            }
            return list;
        }
        private static T DataRowToModel(DataRow dr)
        {
            T model = new T();
            var propertiesCount = typeof(T).GetProperties().Length;
            for (int j = 0; j < propertiesCount; j++)
            {
                PropertyInfo propertyInfo = GetModelPropertyInfo(model, dr.Table.Columns[j]);
                if (propertyInfo != null && dr[j] != DBNull.Value)
                {
                    propertyInfo.SetValue(model, dr[j]);
                }
            }
            return model;
        }
        private static PropertyInfo GetModelPropertyInfo(T model, DataColumn column)
        {
            string propertyName = column.ColumnName;
            return model.GetType().GetProperty(propertyName);
        }
    }

代码中同样需要遍历DataTable,从而把DataTable中的每一行DataRow先转换为T类型的Model。在这里,我们根据每一行数据的数据架构来获取该行的每一列的ColumnName。我们也正是根据此ColumnName来获取泛型T的属性—GetModelPropertyInfo()方法,在其中通过SetValue设置该model的该属性值。也正是使用行数据架构的列属性名称来获取泛型T的属性,所以一定要保证泛型T的属性名称和数据架构名称相同,也只有这样才能使用该通用方法。

相信大牛们早已经掌握了这样的方法,如果有什么提议欢迎指出。如果你学会了,请为自己点赞,也是为我点赞。

时间: 2024-12-25 20:07:57

.NET基础架构方法—DataTableToList通用方法的相关文章

.NET基础架构方法—DataTableToExcel通用方法

p { display: block; margin: 3px 0 0 0; } --> .NET架构基础方法—DataTableToExcel通用方法(NPOI) 今天封装DataTaleToExcel通用方法,也是大家开发中特别常用的.首先去下载NPOI,链接http://npoi.codeplex.com/ ,使用包中的net4.0版本的dll,全部引用.官网中已经给了足够的示例,我只拿来异步分,给类命名为ExcelTools.cs .下面上代码 1 using System; 2 usi

Effective java经验之谈,通用方法

对于通用方法,其实应用的场景是比较多的,我们在写一个类的时候,就要考虑是否要编写该方法的通用方法.这使得我们为以后该类的扩展性与使用方面提供很大的便利. 1.      覆盖equals时请遵守通用约定.自反性,对称性,传递性,一致性,非空性.编写子类equals的方法的时候,可以考虑是否可以用复合,不使用继承来解决问题.Instanceof进行参数检测,如果参数null,也将返回false. 2.      覆盖equals时总要覆盖hashCode. 1.对象属性不变化,返回的hashcod

微软云基础架构Hyper-scale Datacenter

每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向哪里,会怎么传播,我们怎么会快速的得到离我最近的餐厅信息?事实上,你所使用的所有这些服务,都运行在一个个的数据中心中,而数据中心正是信息世界中数据交换,流动,计算的心脏. 越来越多的大型IT公司将自己的数据中心和云端基础设施作为其重要的战略资产和核心竞争力的一部分,也有人可能看到过网上流出的goog

微软云基础架构 Hyper-scale Datacenter

每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向哪里,会怎么传播,我们怎么会快速的得到离我最近的餐厅信息?事实上,你所使用的所有这些服务,都运行在一个个的数据中心中,而数据中心正是信息世界中数据交换,流动,计算的心脏. 越来越多的大型IT公司将自己的数据中心和云端基础设施作为其重要的战略资产和核心竞争力的一部分,也有人可能看到过网上流出的goog

Java远程过程调用基础:构建可自适应的动态代理对象的通用方法

[toc] Java远程过程调用基础:构建可自适应的动态代理对象的通用方法 前言 关于动态代理的知识,这里不再过多说明.这里要介绍的是,如何创建一个可自适应任意接口的动态代理对象的通用方法,也就是说,引用对象可为任意接口,举个例子,假如返回动态代理对象的方法是getProxy,而同时存在两个接口UserInterface和ProductInterface,这时可以这样使用: UserInterface user = getProxy(UserInterface.class); ProductIn

华为荣耀3C最新版ROM的root,(4.7.1和4.8.1等等通用方法)

手头一台honor 3c的机器,应该是线刷的时候,把IMEI给刷掉了,导致移动2G卡无法上网.刷了4.7.1或者4.8.1,尝试了所有方法都root失败了. 正好我手头有6582的代码,我想,既然系统没有root权限,那么我自己编一个工程版的rom,然后把boot.img的中的ramdisk提取了, 然后,用这个ramdisk替代官方包里面的ramdisk,那么不就是一个工程版的rom吧 使用我上传的tools工具,成功分解合并完成.http://download.csdn.net/detail

面向对象二次整理(基础,属性引用,方法引用.绑定方法)

概念之类的去百度一下... 基础 类 属性 实例变量 类变量(默认共享) 私有属性(__var) 方法 构造方法 析构方法或析构函数 私有方法 对象: 实例化一个类之后得到的对象 封装 把一些功能的实现细节不对外暴露 类的初始化(__init__): 就是给对象定义一些自己的特征,不能有返回值 继承 代码的重用 单继承 多继承 2.7的经典类-->深度优先,新式类-->广度优先 3.x 均是广度优先 class Foo() 多态 接口重用,一种接口,多种实现 高级属性: 静态方法 与类无关,不

linux通用邻居基础架构

1.为每一个协议提供一个缓存来存放L3到L2的转换结果. 2.提供在缓存中添加.删除.改变和查找一个特定映射项的函数.查找函数必须要快,因为它会影响整个系统的性能. 3.为每一个协议缓存的数据项提供一种老化机制. 4.当缓存已满时并且正好要创建新的映射项时,提供选择替换策略. 5.为每一个邻居提供一个请求队列.当准备要发送一个封包并且其L2地址还不在地址缓存中是,就必须把这个封包放到缓冲区中,直到发出solicitation请求,并且收到应答.参见27章排队一节. 为了让每一种协议都适应邻居自系

hibernate学习笔记4---HQL、通用方法的抽取实现

一.通用方法的抽取实现 由于hibernate中对增删改查的一切操作都是面向对象的,所以将增删改查抽取成通用方法,以满足不同的表的增删改查操作,简化jdbc代码. 具体例子如下: [java] view plaincopyprint? package cn.itcast.hibernate; import java.io.Serializable; import org.hibernate.Session; import org.hibernate.SessionFactory; import