首页 > 代码库 > DataReader、Table、DataSet和Entity相互转化
DataReader、Table、DataSet和Entity相互转化
public class CommonService { #region DataReader转化 /// <summary> /// 将DataReader转化为Table /// </summary> /// <param name="reader"></param> /// <returns></returns> public static DataTable DataReaderToTable(SqlDataReader reader) { var dt = new DataTable(); if (reader.HasRows) { for (int i = 0; i < reader.FieldCount; i++) { var column = new DataColumn(); column.DataType = reader.GetFieldType(i); column.ColumnName = reader.GetName(i); dt.Columns.Add(column); } while (reader.Read()) { object[] rowObjects = new object[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) { rowObjects.SetValue(reader.GetValue(i), i); } dt.LoadDataRow(rowObjects, true); } } else { dt = null; } return dt; } /// <summary> /// 将DataReader转化为Entity /// </summary> /// <typeparam name="T"></typeparam> /// <param name="reader"></param> /// <returns></returns> public static List<T> DataReaderToEntity<T>(SqlDataReader reader) where T : new() { var list = new List<T>(); T t = default(T); if (reader.HasRows) { while (reader.Read()) { t = (T)Activator.CreateInstance(typeof(T)); for (int i = 0; i < reader.FieldCount; i++) { PropertyInfo property = t.GetType().GetProperty(reader.GetName(i), BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase); if (Convert.IsDBNull(reader.GetValue(i))) { property.SetValue(t, null, null); } else { property.SetValue(t, reader.GetValue(i), null); } list.Add(t); } } } return list; } #endregion #region DataTable转化 /// <summary> /// Table转化为Entity /// </summary> /// <typeparam name="T"></typeparam> /// <param name="table"></param> /// <returns></returns> public static List<T> TableToEntity<T>(DataTable table) where T : new() { var list = new List<T>(); T t = default(T); t = (T)Activator.CreateInstance(typeof(T)); if (table == null || table.Rows.Count == 0) { } else { for (int i = 0; i < table.Rows.Count; i++) { foreach (DataColumn column in table.Columns) { PropertyInfo propertyInfo = t.GetType().GetProperty(column.ColumnName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (Convert.IsDBNull(table.Rows[i][column.ColumnName])) { propertyInfo.SetValue(t, null, null); } else { propertyInfo.SetValue(t, table.Rows[i][column.ColumnName], null); } } list.Add(t); } } return list; } /// <summary> /// Table转化为DataSet /// </summary> /// <param name="table"></param> /// <returns></returns> public static DataSet TableToDataSet(DataTable table) { var dataSet = new DataSet(); dataSet.Tables.Add(table); return dataSet; } #endregion #region Entity转化为Table public static DataTable EntityToTable<T>(List<T> list) where T : new() { var table = new DataTable(); if (list == null || list.Count == 0) { } else { T t = list.FirstOrDefault(); List<PropertyInfo> propertyInfos = t.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase).ToList(); foreach (var propertyInfo in propertyInfos) { table.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType); } object[] objects = new object[propertyInfos.Count]; for (int i = 0; i < list.Count; i++) { foreach (var propertyInfo in propertyInfos) { objects.SetValue(propertyInfo.GetValue(list[i], null), propertyInfos.IndexOf(propertyInfo)); } table.LoadDataRow(objects, true); } } return table; } #endregion }
DataReader、Table、DataSet和Entity相互转化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。