首页 > 代码库 > TList To DataTable

TList To DataTable

using System;   using System.Collections.Generic;  using System.Linq;  using System.Text;   using System.Data;   using System.Collections;  using System.Reflection;   namespace DatableToList  {      class ConvertHelper<T> where T : new()       {          /// <summary>          /// 利用反射和泛型          /// </summary>          /// <param name="dt"></param>           /// <returns></returns>           public static List<T> ConvertToList(DataTable dt)          {                  // 定义集合              List<T> ts = new List<T>();                  // 获得此模型的类型              Type type = typeof(T);              //定义一个临时变量               string tempName = string.Empty;               //遍历DataTable中所有的数据行              foreach (DataRow dr in dt.Rows)               {                   T t = new T();                   // 获得此模型的公共属性                  PropertyInfo[] propertys = t.GetType().GetProperties();                  //遍历该对象的所有属性                  foreach (PropertyInfo pi in propertys)                 {                     tempName = pi.Name;//将属性名称赋值给临时变量                       //检查DataTable是否包含此列(列名==对象的属性名)                        if (dt.Columns.Contains(tempName))                     {                          // 判断此属性是否有Setter                         if (!pi.CanWrite) continue;//该属性不可写,直接跳出                          //取值                         object value =http://www.mamicode.com/ dr[tempName];                           //如果非空,则赋给对象的属性                           if (value != DBNull.Value)                              pi.SetValue(t, value, null);                      }                   }                   //对象添加到泛型集合中                  ts.Add(t);              }               return ts;            }       }  }  
/// <summary>        /// 将集合类转换成DataTable        /// </summary>        /// <param name="list">集合</param>        /// <returns></returns>        public static DataTable ToDataTable(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 ConvertX.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;        }

 

TList To DataTable