List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

        #region 将集合类转换成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;
        }

        #endregion

        #region 将泛型集合类转换成DataTable

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

        #endregion

这个看在自己的类库里面  例如  Common层的 ConvertX 类,专门用于什么转换之类的

List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

时间: 2024-10-14 18:28:53

List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable的相关文章

利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理 2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论:0 | 浏览:45 | 该类在MVC中可以方便管理配置信息,可以直接把Model储存进数据库或者从数据库去除数据转为Model. 1 何为配置项目? 比如网站的名称,页脚信息,meta中的KeyWord信息等,如果不想硬编码到网页里,就需要使用配置文件进行储存,通常都是储存到数据库中.使用的时候读取出来

DataTable转任意类型对象List数组-----工具通用类(利用反射和泛型)

public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ConvertToList(DataTable dt) { //

反射List&lt;M&gt; To DataTable|反射IList To DataTable|反射 DataTable To List&lt;M&gt;

将DataTable集合反射获取 List<M> /// <summary> /// 根据DataTable集合反射获取 List<M> /// </summary> /// <typeparam name="M">泛型实体</typeparam> /// <param name="dt">DataTable</param> /// <returns>实体集合

DataTable转化为泛型集合

前一段时间,因为做机房重构基本思路都没有搞清楚,然后周围接触的概念太多了,就想一开始什么都加上,不堪重负,起步很慢.后来经亮哥提点,一点一点的加东西,就好很多了. 对于泛型集合,前面有很多男神女神已经写的很详细了.但是知识自己总结的才能算是印脑子里了.我就写写自己的理解吧. 看完关于泛型集合的相关资料(博客.设计模式.网上其他一些介绍...),理一理思路: 是什么? [泛型是具有占位符(类型参数)的类.结构.接口和方法.这些占位符是类.结构.接口和方法所存储或使用的一个或多个类型的占位符. 泛型

黑马程序员——java高新技术(新特性、反射、泛型)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java高新技术 第一部分——JDK1.5新特性 1.增强for循环 格式: for(元素类型 变量名 : Collection集合 & 数组 ) { }//增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器 高级for循环和传统for循环的区别: 高级for循环在使用时,必须要明确被遍历的目标.这个目标,可以是Collection集合或者数组,如果遍历Collec

使用反射为泛型集合添加其他类型的数据时遇到的问题

泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合进会去掉“类型”信息,使程序运行效率不受影响. 由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合虽加入其它类型的数据. 所以我们可以用反射为泛型集合添加其他类型的数据. 例1: ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList .add(10); a

利用反射,泛型,静态方法快速获取表单值到Model

在项目中经常需要处理表单,给model赋值,很烦人的一些重复代码.如下边的代码: News news = new News(); news.Id = int.Parse(Request.Form["Id"]); news.Category = int.Parse(Request.Form["Category"]); news.Title = Request.Form["Title"]; news.CreateTime = DateTime.Par

java 反射和泛型

反射 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力.[1]用比喻来说,反射就是程序在运行的时候能够"观察"并且修改自己的行为. 要注意术语"反射"和"内省"(type introspection)的关系.内省(或称"自省")机制仅指程序在运行时对自身信息(称为元数据)的检测:反射机制不仅包括要能在运行时对程序自身信息进行检测,还要求程序能进一步根据这些信息改变程序

基于反射和泛型的编程

基于反射和泛型的编程,泛型是容器话的思路统过泛型对象或泛型方法,管理实际 要操作的对象,以实现对于实际对象管理的一种编程. 比如导出excel生成报表这种在平台开发中及其普遍的需求,有多个对象有生成报表 的需求如每个对象编写生成excel逻辑,程序会变得异常复杂,重复逻辑众多,通过将导 出excel逻辑泛型化,需要生成excel的bean本身不需要做任何变化,就可以按照需求生 成对应报表,这是一种很优雅很方便的报表生成方式.