泛型列表转ToDataTable
/// <summary> /// 列表转换DataTable助手 /// </summary> public static class ListToDatatableHelper { /// <summary> /// 将泛型实体列表转换为DataTable /// </summary> public static DataTable ToDataTable<T>(List<T> items) { var tb = new DataTable(typeof(T).Name); PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in props) { Type t = GetCoreType(prop.PropertyType); tb.Columns.Add(prop.Name, t); } foreach (T item in items) { var values = new object[props.Length]; for (int i = 0; i < props.Length; i++) { values[i] = props[i].FastGetValue(item); } tb.Rows.Add(values); } return tb; } /// <summary> /// 获取实际类型 /// </summary> public static Type GetCoreType(Type t) { if (t != null && IsNullable(t)) { if (t.IsValueType == false) { return t; } return Nullable.GetUnderlyingType(t); } return t; } /// <summary> /// 判断是否是可空类型 /// </summary> public static bool IsNullable(Type t) { return t.IsValueType == false || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)); } }