datatable与实体类之间相互转化的几种方法

#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

  

---------------------
来源:CSDN
原文:https://blog.csdn.net/a11112244444/article/details/78921200
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(datatable与实体类之间相互转化的几种方法)