博客
关于我
C#反射在ADO中的巧用
阅读量:442 次
发布时间:2019-03-06

本文共 1870 字,大约阅读时间需要 6 分钟。

     在C#原生开发网站的时候,经常会碰到一个问题,后台用原生查出来的数据一般是DataReader或者是DataTable,这样就把数据从数据库中拿到了,然后就是把数据绑定到前台页面进行输出,这是最原生态的开发了。然后慢慢的接触到了三层架构了,一番流程下来后,感觉三层架构相比之下确实是规范了不少,先从数据库说,原来从数据库查出来返回到内存的是一个DataTable,然后在前台进行解析解析再解析,DataTable -- Column --- Row -- Cells ,在三层架构呢 ,返回一个List<>集合,我把它叫做对象数组,就是存放一种对象类型的集合,我们都知道List<>集合实现了IEumerable这个接口,SO,我们可以用foreach了然后调用model的属性,进行输出,上代码:

 

foreach (var item in List
) { Response.Write(item.id); }

  

那么问题来了,DataTable <-----> Model 这个转化改怎么进行呢,刚开始有一种笨方法,就是先把DataTable循环出来,然后再给Model实体的属性依次赋值,然后就这时的数据就变成了Model 里面的属性了,是不是特笨,后来老师讲了反射,然后就想到了这个方法,以前一大堆代码的事,现在一个方法搞定,先大概看下代码:

 

public static List
Map
(DataTable dt) where FanShe :class,new() { List
list = new List
(); var prop = typeof(FanShe).GetProperties(); int count = dt.Rows.Count; for (int i = 0; i < count; i++) { FanShe f = new FanShe(); foreach (var item in prop) { item.SetValue(f,dt.Rows[i][item.Name],null); } list.Add(f); } return list; }

这样就省事多了,DataDable ----> Map<>() ---->Model ,传入方法一个DataTable然后就你直接拿个List<User> users 接收就ok了,是不是很爽,其实效率就是这样慢慢高起来的,有些很繁琐和重复的东西,如果能够有一种自动化的方案去解决的,那肯定是绝佳了,好了,先分析下代码:

为什么DataTable能转化成Model实体呢 ,其实稍微想一下,就明白了,DataTable中的行和列,对应的就是Model实体的属性和Count,然后在经过C#的反射,方法就成了。

 

public static List
Map
(DataTable dt) where FanShe :class,new()

方法后面的这个Where是方法的约束,具体就不多说了

 

var prop = typeof(FanShe).GetProperties();

  这一句先拿到FanShe的数据类型,他可以是User 也可以是Student ,调用方法拿到这个类型class的所有属性,prop是一个属性的数组,然后思路就有了

item.SetValue(f,dt.Rows[i][item.Name],null);

先foreach prop这个属性集合,拿到的就是Id,Name,Tiele之类的,然后在Foreach DataTable,DataTa的取值可以是 Dt.Rows[0] 也可以是Dt.Rows["Id"] ,正是利用第二种方法,属性名和DataTable的行的名字相同,然后就是for循环,走了一圈又一圈,这样Model实体就出来了。

 

转载地址:http://igeyz.baihongyu.com/

你可能感兴趣的文章
n = 3 , while n , continue
查看>>
n 叉树后序遍历转换为链表问题的深入探讨
查看>>
N-Gram的基本原理
查看>>
nacos config
查看>>
Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
查看>>
Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制
查看>>
NacosClient客户端搭建,微服务注册进nacos
查看>>
Nacos原理
查看>>
Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
查看>>
Nacos启动异常
查看>>
Nacos和Zookeeper对比
查看>>
Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
查看>>
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
Nacos服务注册与发现demo
查看>>
nacos本地可以,上服务器报错
查看>>
Nacos注册中心有几种调用方式?
查看>>
nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
查看>>