【转】给DataTable和DataRow扩展方法,直接转换为对象集合或对象
2023-09-27 14:20:55 时间
/// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为对象集合或对象 /// 补充说明:此扩展类可以极大的简化操作,但是性能低下,大数据以及高性能要求下慎用. /// 此类如果放到asp.net的App_Code文件夹下会有编译错误,放到其他地方则无此问题 /// </summary> using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Reflection; namespace ChengChenXu.Blog.DAL { internal static class DataTableExtensions { /// <summary> /// 把DataRow直接转换成对应的实体对象,给DataRow添加一个扩展方法,方便使用. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dr"></param> /// <returns></returns> internal static T ToModel<T>(this DataRow dr) { T t = Activator.CreateInstance<T>(); // 利用反射获得此模型的公共属性 string attributeName = String.Empty; PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { attributeName = pi.Name; // 检查DataTable是否包含此列 //此处要求DataRow的列名称要和对象属性名称一致 //注意:此处大小写不敏感 if (dr.Table.Columns.Contains(attributeName)) { // 判断此属性是否为只读(不包含set构造) if (!pi.CanWrite) { continue; } //给属性赋值 var value = dr[attributeName]; if (value != DBNull.Value) { pi.SetValue(t, value,null); } } } return t; } /// <summary> /// 将DataTable直接转化为对象集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> internal static List<T> ToModelList<T>(this DataTable dt) { List<T> list = new List<T>(); //调用ToModel方法添加List for (int i = 0; i < dt.Rows.Count; i++) { T t = Activator.CreateInstance<T>(); t = dt.Rows[i].ToModel<T>(); list.Add(t); } return list; } } }
转自:http://chengchenxu.com
相关文章
- DataTable和DataRow利用反射直接转换为Model对象的扩展方法类
- Word控件Spire.Doc 转换教程(二十六):在 C#、VB.NET 中将 Word 转换为 EPUB 时添加封面图片
- Word控件Spire.Doc 转换教程(二十一):将非标准字体的word文档转换为PDF
- strtok在keil中使用小笔记及字符串转换为多个浮点数的方法
- 信号转换的解题思路
- 【PSO】基于PSO粒子群优化的物料点货物运输成本最低值计算matlab仿真,包括运输费用、代理人转换费用、运输方式转化费用和时间惩罚费用
- 经纬度坐标与高斯坐标的转换代码(转)
- E-R图向关系模式的转换
- 用Java将字符串的首字母转换大小写
- 关于ELF可执行文件转换为bin二进制文件反而变大带来的思考和解决方法
- 《数据科学:R语言实现》——第2章 数据抽取、转换和加载 2.1 引言
- electron配置文件,yamljs转换yml文件,设置共享数据(global.sharedObject)
- Error at “paper.tex“ (line 23, column 10): expecting end{document} end{CJK}-pandoc转换tex文件为doc文件问题
- 强制转换的使用技巧(keil下的C51)
- Flutter开发 -sentry的扩展使用二(将截图进行base64转换后上传到sentry,动态获取app版本信息)
- QString, string, int, char* 之间相互转换
- 【C#】枚举和字符串以及数字之间的互相转换
- CAD版本太低打不开图纸怎么办?CAD图纸版本转换教程
- ssl证书转换cer转pem