记得在学校的时候,接触得最多的就是SqlHelper,每次在读取的时候不管是DataTable还是DataReader转换为实体对象的时候是最恼火的,因为要写很多代码,而且没有什么意义。后面接触到了反射,于是查了下资料也写了个已经烂大街的DataTable转换为Model实体对象

 public static IEnumerable<T> DataTableToModels<T>(this DataTable dt) where T : class, new()
{
//判断datatable是否有值
if (dt.Columns.Count < || dt.Rows.Count < ) yield return default(T);
//获取实体类中所有公开的属性,并且筛选出在datatable中存在的列
var propertyInfos = from propertyInfo in typeof(T).GetProperties()
where dt.Columns.Contains(propertyInfo.Name)
select propertyInfo;
//循环设置属性
foreach (DataRow dr in dt.Rows)//遍历dt中所有行
{
var result = new T();
foreach (var p in propertyInfos)//遍历所有属性
{
try
{
p.SetValue(result, dr[p.Name], null);
}
catch (System.Exception)
{ throw;
}
}
yield return result;
} }

需要注意的是DataTable.Columns.Contains和赋值给定Name时是不区分大小写的!

最新文章

  1. [sqoop1.99.7] sqoop实例——数据ETL
  2. React Native的环境搭建以及开发的IDE
  3. [LintCode] Maximum Gap 求最大间距
  4. 转载:使用sklearn做单机特征工程
  5. [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现
  6. (十)学习CSS之padding属性
  7. 【HDOJ】1276 士兵队列训练问题
  8. 一个由proguard与fastJson引起的血案
  9. Laravel创建Model
  10. Spark踩坑记——从RDD看集群调度
  11. Oracle-数据类型为date 日期查询技巧
  12. 兄弟连学Python-Mysql的操作应用
  13. linux基础一篇就够了
  14. MySQL-查询结果缓存
  15. ios如何实现静音模式下声音仍然可以外放
  16. Brute-Force算法
  17. oracle取出多个字段列中的最大值和最小值
  18. Princess Principal(思维题)
  19. 洛谷 P4478 [BJWC2018]上学路线
  20. Scrum立会报告+燃尽图(Final阶段第六次)

热门文章

  1. JavaEE5 Tutorial_Servlet
  2. 使用SignalR实现比特币价格实时刷新
  3. python setup.py install 失败
  4. 关于登录的会话控制, 终极解决方案 - chunyu
  5. Android JNI之C/C++层调用JAVA
  6. IOS下arm64汇编疑问
  7. 第二百五十九天 how can I 坚持
  8. codeforces 629A Far Relative’s Birthday Cake
  9. AVCaptureDevice
  10. TypeScript学习笔记(五):接口