| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | using System.Collections.Generic;using System.Data;using System.Reflection;namespace Core.Util.Common{    /// <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();                foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())                {                    model.GetType().GetProperty(propertyInfo.Name).SetValue(model, dr[propertyInfo.Name], 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();            foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())            {                model.GetType().GetProperty(propertyInfo.Name).SetValue(model, dr[propertyInfo.Name], 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    }}
 |