From 976700da4fe63861847f150b788ff0bc3d3cc41c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= <840465812@qq.com>
Date: Sat, 15 Jun 2019 09:42:51 +0800
Subject: [PATCH] Add DataTable <=> Model Convert Helper
---
DataHelper/ModelHandler.cs | 153 +++++++++++++++++++++++++++++++++++++
1 file changed, 153 insertions(+)
create mode 100644 DataHelper/ModelHandler.cs
diff --git a/DataHelper/ModelHandler.cs b/DataHelper/ModelHandler.cs
new file mode 100644
index 0000000..a99ba0f
--- /dev/null
+++ b/DataHelper/ModelHandler.cs
@@ -0,0 +1,153 @@
+ ///
+ /// 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
+ }
\ No newline at end of file