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