首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

List 转 DATATABLE (反照)

2012-09-18 
List 转 DATATABLE (反射)/// summary/// 将集合类转换成DataTable/// /summary/// param namelist

List 转 DATATABLE (反射)

/// <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;        }
?

热点排行