using System; using System.Collections.Generic; using System.Data; using System.Reflection; using System.Text; namespace Admin.Core.Common { /// /// DataTable /// public static class DataTableHelper { /// /// DataTable转成List /// /// /// /// public static List ToDataList(this DataTable dt) { var list = new List(); var plist = new List(typeof(T).GetProperties()); foreach (DataRow item in dt.Rows) { T s = Activator.CreateInstance(); for (int i = 0; i < dt.Columns.Count; i++) { PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName); if (info != null) { try { if (!Convert.IsDBNull(item[i])) { object v = null; if (info.PropertyType.ToString().Contains("System.Nullable")) { v = Convert.ChangeType(item[i], Nullable.GetUnderlyingType(info.PropertyType)); } else { v = Convert.ChangeType(item[i], info.PropertyType); } info.SetValue(s, v, null); } } catch (Exception ex) { throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message); } } } list.Add(s); } return list; } /// /// DataTable转成Dto /// /// /// /// public static T ToDataDto(this DataTable dt) { T s = Activator.CreateInstance(); if (dt == null || dt.Rows.Count == 0) { return s; } var plist = new List(typeof(T).GetProperties()); for (int i = 0; i < dt.Columns.Count; i++) { PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName); if (info != null) { try { if (!Convert.IsDBNull(dt.Rows[0][i])) { object v = null; if (info.PropertyType.ToString().Contains("System.Nullable")) { v = Convert.ChangeType(dt.Rows[0][i], Nullable.GetUnderlyingType(info.PropertyType)); } else { v = Convert.ChangeType(dt.Rows[0][i], info.PropertyType); } info.SetValue(s, v, null); } } catch (Exception ex) { throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message); } } } return s; } /// /// 将实体集合转换为DataTable /// /// 实体类型 /// 实体集合 public static DataTable ToDataTable(List entities) { var result = CreateTable(); FillData(result, entities); return result; } /// /// 创建表 /// public static DataTable CreateTable() { var result = new DataTable(); var type = typeof(T); foreach (var property in type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)) { var propertyType = property.PropertyType; if ((propertyType.IsGenericType) && (propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))) propertyType = propertyType.GetGenericArguments()[0]; result.Columns.Add(property.Name, propertyType); } return result; } /// /// 填充数据 /// public static void FillData(DataTable dt, IEnumerable entities) { foreach (var entity in entities) { dt.Rows.Add(CreateRow(dt, entity)); } } /// /// 创建行 /// public static DataRow CreateRow(DataTable dt, T entity) { DataRow row = dt.NewRow(); var type = typeof(T); foreach (var property in type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)) { row[property.Name] = property.GetValue(entity) ?? DBNull.Value; } return row; } } }