原文地址:/marblemm/p/7084797.html
/// <summary>/// DataTable与实体类互相转换/// </summary>/// <typeparam name="T">实体类</typeparam>public class ModelHandler<T> where T : new(){#region DataTable转换成实体类/// <summary>/// 填充对象列表:用DataSet的第一个表填充实体类/// </summary>/// <param name="ds">DataSet</param>/// <returns></returns>public List<T> FillModel(DataSet ds){if (ds == null || ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0){return null;}else{return FillModel(ds.Tables[0]);}}/// <summary> /// 填充对象列表:用DataSet的第index个表填充实体类/// </summary> public List<T> 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]);}}/// <summary> /// 填充对象列表:用DataTable填充实体类/// </summary> public List<T> FillModel(DataTable dt){if (dt == null || dt.Rows.Count == 0){return null;}List<T> modelList = new List<T>();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;}/// <summary> /// 填充对象:用DataRow填充实体类/// </summary> 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/// <summary>/// 实体类转换成DataSet/// </summary>/// <param name="modelList">实体类列表</param>/// <returns></returns>public DataSet FillDataSet(List<T> modelList){if (modelList == null || modelList.Count == 0){return null;}else{DataSet ds = new DataSet();ds.Tables.Add(FillDataTable(modelList));return ds;}}/// <summary>/// 实体类转换成DataTable/// </summary>/// <param name="modelList">实体类列表</param>/// <returns></returns>public DataTable FillDataTable(List<T> 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;}/// <summary>/// 根据实体类得到表结构/// </summary>/// <param name="model">实体类</param>/// <returns></returns>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}
如果觉得《【转】DataTable与实体类互相转换》对你有帮助,请点赞、收藏,并留下你的观点哦!