当前位置: 首页 > news >正文

.Net中ListT 泛型转成DataTable、DataSet

在开发过程过程中有时候需要将List<T>泛型转换成DataTable、DataSet,可以利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值。

1、List<T>泛型转换成DataTable 代码:

        /// <summary>
        /// List<T>转换成DataTable  
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="dataList">集合数据</param>
        /// <returns>返回DataTable</returns>
        public static System.Data.DataTable ToDataTable<T>(this System.Collections.Generic.IList<T> list, System.Collections.Generic.IList<T> dataList) where T : class ,new()
        {
            if (dataList == null || !dataList.Any())
            {
                return null;
            }
            Type type = typeof(T);
            System.Data.DataTable dt = new System.Data.DataTable(type.Name);
            System.Reflection.PropertyInfo[] propertyInfoArray = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
            foreach (T t in dataList.Where(t => t != null))
            {
                System.Data.DataRow row = dt.NewRow();
                for (int i = 0, j = propertyInfoArray.Length; i < j; i++)
                {
                    System.Reflection.PropertyInfo propertyInfo = propertyInfoArray[i];
                    string name = propertyInfo.Name;
                    if (dt.Columns[name] == null)
                    {
                        System.Data.DataColumn column = new System.Data.DataColumn(name, propertyInfo.PropertyType);
                        dt.Columns.Add(column);
                    }
                    row[name] = propertyInfo.GetValue(t, null);
                }
                dt.Rows.Add(row);
            }
            return dt;
        }

 

2、List<T>泛型转换成DataSet 代码:

         /// <summary>
        /// List<T>转换成DataSet  
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="dataList">集合数据</param>
        /// <returns>返回DataSet</returns>
        public static System.Data.DataSet ToDataSet<T>(this System.Collections.Generic.IList<T> list, System.Collections.Generic.IList<T> dataList) where T : class ,new()
        {
            if (dataList == null || !dataList.Any())
            {
                return null;
            }
            Type type = typeof(T);
            System.Data.DataSet ds = new System.Data.DataSet();
            System.Data.DataTable dt = new System.Data.DataTable(type.Name);
            System.Reflection.PropertyInfo[] propertyInfoArray = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
            foreach (T t in dataList.Where(t => t != null))
            {
                System.Data.DataRow row = dt.NewRow();
                for (int i = 0, j = propertyInfoArray.Length; i < j; i++)
                {
                    System.Reflection.PropertyInfo propertyInfo = propertyInfoArray[i];
                    string name = propertyInfo.Name;
                    if (dt.Columns[name] == null)
                    {
                        System.Data.DataColumn column = new System.Data.DataColumn(name, propertyInfo.PropertyType);
                        dt.Columns.Add(column);
                    }
                    row[name] = propertyInfo.GetValue(t, null);
                }
                dt.Rows.Add(row);
            }
            ds.Tables.Add(dt);
            return ds;
        }

 

转载于:https://www.cnblogs.com/linJie1930906722/p/6045090.html

相关文章:

  • linux线程的实现【转】
  • JAVA设计模式
  • 你知道市面上机器人都用哪些操作系统吗【转】
  • ArcGIS安装错误1402
  • 前端的学习
  • .NET 表达式计算:Expression Evaluator
  • 2016-11-10试题解题报告
  • Java中的Random()函数
  • SSD硬盘的4K对齐
  • 《深入理解Java7核心技术与最佳实践》读书笔记(1.1)---Project Coin介绍
  • 关闭CENTOS不必要的默认服务
  • 改变的六条规则
  • ThinkPAD e450 安装 win 7 系统 BIOS设置
  • storm togolopy转换jstorm topology
  • maven公共仓库
  • @jsonView过滤属性
  • [数据结构]链表的实现在PHP中
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • express如何解决request entity too large问题
  • Java多线程(4):使用线程池执行定时任务
  • Mithril.js 入门介绍
  • Puppeteer:浏览器控制器
  • Redis中的lru算法实现
  • Spring Boot MyBatis配置多种数据库
  • 大型网站性能监测、分析与优化常见问题QA
  • 解决iview多表头动态更改列元素发生的错误
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • #每天一道面试题# 什么是MySQL的回表查询
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (pytorch进阶之路)扩散概率模型
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (SpringBoot)第七章:SpringBoot日志文件
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)Linux——Linux常用指令
  • (附源码)ssm高校实验室 毕业设计 800008
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (循环依赖问题)学习spring的第九天
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net core 6 redis操作类
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .Net7 环境安装配置
  • .NET简谈设计模式之(单件模式)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET项目中存在多个web.config文件时的加载顺序
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution