public static class DataTableExtensions
{ /// <summary> /// 转化一个DataTable /// </summary> /// <typeparam
name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static DataTable
ToDataTable<T>(this IEnumerable<T> list) { //创建属性的集合 List<PropertyInfo> pList = new List<PropertyInfo>(); //获得反射的入口 Type type = typeof(T); DataTable dt = new DataTable(); //把所有的public属性加入到集合 并添加DataTable的列 Array.ForEach<PropertyInfo>(type.GetProperties(), p
=> { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); }); foreach (var item in list) { //创建一个DataRow实例 DataRow row = dt.NewRow(); //给row 赋值 pList.ForEach(p => row[p.Name] = p.GetValue(item,
null)); //加入到DataTable dt.Rows.Add(row); } return dt; } /// <summary> /// DataTable 转换为List 集合 /// </summary> /// <typeparam
name="TResult">类型</typeparam> /// <param
name="dt">DataTable</param> /// <returns></returns> public static List<T> ToList<T>(this DataTable dt) where T :
class,
new() { //创建一个属性的列表 List<PropertyInfo> prlist = new List<PropertyInfo>(); //获取TResult的类型实例 反射的入口 Type t = typeof(T); //获得TResult 的所有的Public 属性
并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 Array.ForEach<PropertyInfo>(t.GetProperties(), p
=> { if (dt.Columns.IndexOf(p.Name)
!= -1) prlist.Add(p); }); //创建返回的集合 List<T> oblist = new List<T>(); foreach (DataRow
row in dt.Rows) { //创建TResult的实例 T ob = new T(); //找到对应的数据 并赋值 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name],
null);
}); //放入到返回的集合中. oblist.Add(ob); } return oblist; } /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list">集合</param> /// <returns></returns> public static DataTable
ToDataTableTow(IList list) { DataTable result = new DataTable(); if (list.Count
> 0) { PropertyInfo[] propertys =
list[0].GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { result.Columns.Add(pi.Name, pi.PropertyType); } for (int i = 0; i <
list.Count; i++) { ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys) { object obj =
pi.GetValue(list[i], null); tempList.Add(obj); } object[] array =
tempList.ToArray(); result.LoadDataRow(array, true); } } return result; } /**/ /// <summary> /// 将泛型集合类转换成DataTable /// </summary> /// <typeparam
name="T">集合项类型</typeparam> /// <param name="list">集合</param> /// <returns>数据集(表)</returns> public static DataTable
ToDataTable<T>(IList<T> list) { return ToDataTable<T>(list, null); } /**/ /// <summary> /// 将泛型集合类转换成DataTable /// </summary> /// <typeparam
name="T">集合项类型</typeparam> /// <param name="list">集合</param> /// <param
name="propertyName">需要返回的列的列名</param> /// <returns>数据集(表)</returns> public static DataTable
ToDataTable<T>(IList<T> list, params string[]
propertyName) { List<string>
propertyNameList = new List<string>(); if (propertyName
!= null) propertyNameList.AddRange(propertyName); DataTable result = new DataTable(); if (list.Count
> 0) { PropertyInfo[] propertys =
list[0].GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { if (propertyNameList.Count == 0) { result.Columns.Add(pi.Name, pi.PropertyType); } else { if (propertyNameList.Contains(pi.Name)) result.Columns.Add(pi.Name, pi.PropertyType); } } for (int i = 0; i <
list.Count; i++) { ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys) { if (propertyNameList.Count == 0) { object obj =
pi.GetValue(list[i], null); tempList.Add(obj); } else { if (propertyNameList.Contains(pi.Name)) { object obj =
pi.GetValue(list[i], null); tempList.Add(obj); } } } object[] array =
tempList.ToArray(); result.LoadDataRow(array, true); } } return result; } }List<T>转换为DataTable,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/kevin1988/p/3777347.html