博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】DataTable与实体类互相转换
阅读量:4677 次
发布时间:2019-06-09

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

原文地址:

///     /// DataTable与实体类互相转换    ///     /// 
实体类
public class ModelHandler
where T : new() { #region DataTable转换成实体类 ///
/// 填充对象列表:用DataSet的第一个表填充实体类 /// ///
DataSet ///
public List
FillModel(DataSet ds) { if (ds == null || ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0) { return null; } else { return FillModel(ds.Tables[0]); } } ///
/// 填充对象列表:用DataSet的第index个表填充实体类 /// public List
FillModel(DataSet ds, int index) { if (ds == null || ds.Tables.Count <= index || ds.Tables[index].Rows.Count == 0) { return null; } else { return FillModel(ds.Tables[index]); } } ///
/// 填充对象列表:用DataTable填充实体类 /// public List
FillModel(DataTable dt) { if (dt == null || dt.Rows.Count == 0) { return null; } List
modelList = new List
(); foreach (DataRow dr in dt.Rows) { //T model = (T)Activator.CreateInstance(typeof(T)); T model = new T(); for (int i = 0; i < dr.Table.Columns.Count; i++) { PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName); if (propertyInfo != null && dr[i] != DBNull.Value) propertyInfo.SetValue(model, dr[i], null); } modelList.Add(model); } return modelList; } ///
/// 填充对象:用DataRow填充实体类 /// public T FillModel(DataRow dr) { if (dr == null) { return default(T); } //T model = (T)Activator.CreateInstance(typeof(T)); T model = new T(); for (int i = 0; i < dr.Table.Columns.Count; i++) { PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName); if (propertyInfo != null && dr[i] != DBNull.Value) propertyInfo.SetValue(model,dr[i],null); } return model; } #endregion #region 实体类转换成DataTable ///
/// 实体类转换成DataSet /// ///
实体类列表 ///
public DataSet FillDataSet(List
modelList) { if (modelList == null || modelList.Count == 0) { return null; } else { DataSet ds = new DataSet(); ds.Tables.Add(FillDataTable(modelList)); return ds; } } ///
/// 实体类转换成DataTable /// ///
实体类列表 ///
public DataTable FillDataTable(List
modelList) { if (modelList == null || modelList.Count == 0) { return null; } DataTable dt = CreateData(modelList[0]); foreach(T model in modelList) { DataRow dataRow = dt.NewRow(); foreach (PropertyInfo propertyInfo in typeof(T).GetProperties()) { dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null); } dt.Rows.Add(dataRow); } return dt; } ///
/// 根据实体类得到表结构 /// ///
实体类 ///
private DataTable CreateData(T model) { DataTable dataTable = new DataTable(typeof (T).Name); foreach (PropertyInfo propertyInfo in typeof(T).GetProperties()) { dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType)); } return dataTable; } #endregion }

 

转载于:https://www.cnblogs.com/ZXdeveloper/p/10708615.html

你可能感兴趣的文章
HDU 6319(单调队列)
查看>>
Android 常用数据操作封装类案例
查看>>
php方法 隐藏手机号中间四位
查看>>
需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
查看>>
django之同源策略
查看>>
JAVA(时间对比排序程序)
查看>>
complex()
查看>>
各种字符串hash
查看>>
测试构造器它山之玉可以重构:身份证号(第四天)
查看>>
JS与PHP向函数传递可变参数的区别
查看>>
单元测试之初识
查看>>
golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法
查看>>
内存分配 保存数据
查看>>
嵌入式实时操作系统的可裁剪性及其实现
查看>>
VC++2012编程演练数据结构《31》狄杰斯特拉算法
查看>>
盘点:移动服务 #AzureChat
查看>>
Sass学习笔记
查看>>
C语言练习
查看>>
1001. Extending MyPoint class
查看>>
js使用showModalDialog,弹出一个自适应大小窗口
查看>>