博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从DataTable到List<Model>(C#.net)
阅读量:4601 次
发布时间:2019-06-09

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

 

平时做业务设计的时候,总是离不了建立各种实体模型Model,但一般这些模型都需要从查询结果DataTable生成,

一般的写法是:为每一个模型编写一个方法,实现DataTable到Model的转换。

但这个方法有一些问题:

 (1)工作效率低:要为每个属性编写赋值语句,工作重复。

(2)代码重用性差:不同的类有不同的属性,这个Model转换不能够用于另一个Model的转换

(3)DataTable字段检测费力:每一次属性赋值都要写个判断,以确定这个Field字段是否存在,它的值是否是否合法,检测费力

解决:利用反射和泛型,写一个通用类,实现这个转换过程。(下面是网上找的代码,是正确的。这个方法我自己也写了,只是没别人写的规范,就拿别人的用用吧

View Code
1 using System; 2 using System.Collections.Generic;  3 using System.Text;  4 using System.Data;  5 using System.Reflection;    6 namespace NCL.Data  7 {      8     ///       9     /// 实体转换辅助类     10     ///      11     public class ModelConvertHelper
where T : new() 12 { 13 public static IList
ConvertToModel(DataTable dt)14 { 15 // 定义集合 16 IList
ts = new List
();17 // 获得此模型的类型 18 Type type = typeof(T); 19 string tempName = ""; 20 foreach (DataRow dr in dt.Rows) 21 { 22 // 获得此模型的公共属性 23 PropertyInfo[] propertys = t.GetType().GetProperties(); 24 foreach (PropertyInfo pi in propertys) 25 { tempName = pi.Name; 26 // 检查DataTable是否包含此列 27 if (dt.Columns.Contains(tempName)) 28 { 29 // 判断此属性是否有Setter 30 if (!pi.CanWrite) continue; 31 object value = dr[tempName]; 32 if (value != DBNull.Value) 33 pi.SetValue(t, value, null); 34 } 35 } 36 ts.Add(t); 37 } 38 return ts; 39 } 40 } 41 } 42 43 //示例:44 // 获得查询结果 45 DataTable dt = DbHelper.ExecuteDataTable(...); 46 // 把DataTable转换为IList
47 IList
users = ModelConvertHelper
.ConvertToModel(dt);

 

转载于:https://www.cnblogs.com/liwenqiang/archive/2012/05/27/2519697.html

你可能感兴趣的文章
Lecture 3: Planning by Dynamic Programming
查看>>
用flash代替图片IMG,设置动态效果链接
查看>>
关于JS的随笔(二)
查看>>
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
查看>>
webbug3.0菜鸟笔记1
查看>>
数组相关函数
查看>>
Python 和其他编程语言数据类型的比较
查看>>
T2695 桶哥的问题——送桶 题解
查看>>
HTML5 表单
查看>>
Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧...
查看>>
OLEDB和ODBC的区别(优缺点)
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
CLR执行模块基础
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
(待完成)qbxt2019.05 总结12 - 趣味题目 鹰蛋
查看>>