文档章节

Dynamic convert DataTable into entity collectio...

doublefish
 doublefish
发布于 2012/03/16 00:00
字数 367
阅读 337
收藏 2

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>


Dynamic convert DataTable into entity collection -- 动态转换数据表成实体集合

在编程中,经常要将查询结果DataTable转换为实体集合,因为每个实体的属性都不一样,所以每个实体都要写专门的转换方法。

如果一个系统中有多个实体,几十上百个,哦,阿门,这种纯体力的劳动,对于作为将编程看作一门艺术的程序猿们,是无法忍受的!?
所以,对于这个在代码和技术含量上,严重影响了我们一行一行敲出来的艺术品的艺术性的问题,我们要解决它!
下面是我的解决办法
涉及技术:反射和泛型。
 

using System; 
using System.Data; 
using System.Reflection; 

namespace DoubleFish.Database 
{ 
    /// < summary> 
     ////// DataTable扩展 
     /// </summary> 
    public static class DataTableExtension 
    { 
        /// <summary>
        /// 将DataTable转换为对应的实体数组 
        /// </summary> 
        public static T[] ToArray(this DataTable dataTable) where T : new() 
        { 
            if (dataTable == null || dataTable.Rows.Count == 0) 
                return new T[] { }; 

            // 定义集合 
            T[] array = new T[dataTable.Rows.Count]; 

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

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

            for (int i = 0; i < dataTable.Rows.Count; i++) 
            { 
                array[i] = new T(); 
                foreach (PropertyInfo pi in properties) 
                { 
                    // 检查DataTable是否包含此列 
                    if (!dataTable.Columns.Contains(pi.Name)) 
                        continue; 

                    // 判断此属性是否有Setter 
                     if (!pi.CanWrite) 
                        continue; 

                    object value = dataTable.Rows[i][pi.Name];
                    if (value == DBNull.Value)
                        continue;

                    pi.SetValue(array[i], value, null);
               }
            }
        }
        return array;
    }
}



还有 ToList(), ToModel 的原理和这个一样,就不贴了。
使用方法:

var ds = DbHelperSQL.Query(strSql, listPara.ToArray());
var array = ds.Tables[0].ToArray(); // DataTable To Array


 


© 著作权归作者所有

doublefish
粉丝 0
博文 1
码字总数 367
作品 0
合肥
程序员
私信 提问
加载中

评论(0)

Dapper(一) 简介和性能

Dapper的简介   Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来...

osc_ujeqpb4c
2019/08/15
1
0
IBatis.net使用说明

IBatis.net是移植于java版本,所以在.net平台上的操作和java平台上的操作基本没有什么太大的差别。严格来说,ibatis.net并不算的上是一种orm,因为它的sql语句均写到了配置文件中,没有自己专...

JungleKing
2016/11/23
68
0
LINQ Script: A Universal Object-Oriented Database Query Language

Download LINQFramework-noexe.zip - 172 KB Download LINQFramework.zip - 820 KB Download TestDataxcc8004genes.zip - 1.4 MB Background The object-relationship database is the most ......

Mr. xieguigang 谢桂纲
2014/02/06
0
0
jquery datatable 常用例子

在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。 一、DataTable简介 (1)构造函数 ...

wolf_su
2013/05/28
1K
0
jquery datatable 常用例子及函数等

在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。 一、DataTable简介 (1)构造函数 ...

最深的夜
2015/01/26
1.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

Flutter 使用Navigator进行局部跳转页面

老孟导读:Navigator组件使用的频率不是很高,但在一些场景下非常适用,比如局部表单多页填写、底部导航一直存在,每个tab各自导航场景。 Navigator 是管理路由的控件,通常情况下直接使用N...

老孟Flutter
21分钟前
28
0
使用site-maven-plugin在github上搭建公有仓库

简介 Maven是我们在开发java程序中经常使用的构建工具,在团队合作开发过程中,如果我们想要将自己写好的jar包共享给别人使用,通常需要自己搭建maven仓库,然后将写好的jar包上传到maven仓库...

flydean
49分钟前
25
1
Python笔记:爬取各国疫情仙去人数数据制作南丁格尔玫瑰图

我凌晨用Python爬虫实时从网上爬取各国在疫情中仙去人数的数据,然后仿人民日报制作成“南丁格尔玫瑰图” 英国37048;意大利32877;西班牙27117都对得上; 但美国、法国、巴西的跟百度大数据...

tengyulong
今天
26
0
PHP Session的用法

在 PHP 中,Session 是一种服务器端的机制,服务器使用一种散列表的结构(类似于 JSON)来保存信息。相比于保存在客户端的 Cookie,Session 将用户交互信息保存在了服务器端,使得同一个客户...

linuxprobe2020
今天
37
0
webpack.03-打包js同时生成html页面

在空文件夹初始化:CMD npm init -y cnpm install -D webpack webpack-cli 文件结构 src(文件夹)--->test.js console.log('hello webpack') src(文件夹)--->index.html <html> ......

_qq507570355
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部