如何运用Reflection转化DynamicObject和Generic集合为DataTable
正在做的项目里面有需要把DAL 产生的Poco Collection转为DataTable然后交给别的模块处理报表
想了一下 写个支持Generic的方法吧, 不过不知道如何判断 T是否是DynamicObject的类型
于是取了第一个item,用它来判断一下,这样写肯定不是最好的,把code贴上抛砖引玉。
public static DataTable ToDataTable<T>(IEnumerable<T> input, string tableName) { var dt = new DataTable(); dt.TableName = tableName; var first = Enumerable.First(input); if (first is System.Dynamic.DynamicObject) { IDictionary<string, object> properties = (IDictionary<string, object>)first; foreach (var p in properties) { var type = p.Value.GetType();if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) type = type.GetGenericArguments()[0]; dt.Columns.Add(p.Key, type); } foreach (T r in input) { var values = new object[properties.Count];int i = 0;foreach (var p in properties) { values[i] = (r as IDictionary<string, object>)[p.Key]; i++; } dt.LoadDataRow(values, true); } } else { var properties = typeof(T).GetProperties(); foreach (var p in properties) { var type = p.PropertyType;if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) type = type.GetGenericArguments()[0]; dt.Columns.Add(p.Name, type); } foreach (T r in input) { var values = new object[properties.Length];int i = 0;foreach (var p in properties) { values[i] = p.GetValue(r, null); i++; } dt.LoadDataRow(values, true); } }return dt; }
转载于:https://www.cnblogs.com/gunsmoke/archive/2011/10/20/2218787.html
如何运用Reflection转化DynamicObject和Generic集合为DataTable相关推荐
- [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...
点击下载 ConvertJson.rar 本类实现了 C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json| 等功能 大 ...
- 二:C#对象、集合、DataTable与Json内容互转示例;
导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型: 二:C#对象.集合.DataTable与Json内容互转示例: ...
- python列表转化为元组、集合_如何在Python中将元组列表更改为集合?
我在Python中创建了一个函数,它返回抛出2个骰子的所有可能结果的列表. 元组列表:[(1,1),(1,2),-,(6,6)].在 然后我写了一个函数来找出两个值之和为偶数的所有元素(a),另一个函 ...
- c#将list集合转换为datatable的简单办法
public static class ExtensionMethods { /// <summary> /// 将List转换成DataT ...
- 【机房收费个人版】DataTable 与泛型集合的较量
将近三周的时间,我学到了很多知识,让我受益匪浅!也通过这三周的积累和整理,现在是时候写博客分享我的所知所得了..下面主要写DataTable.泛型集合以及它们之间的比较.. DataTable ...
- Struts2 官方教程之Struts Tags(六)——Generic Tags(Control Tags )
开头要说的:在早期的应用开发中,表现层Jsp页面主要使用Jsp脚本来控制输出.这样,在Jsp中嵌套了java脚本,这种方式不管是可读性还是可维护性都很差,几乎使Jsp成为Java的子集.从Jsp1.1 ...
- List集合与Array数组之间的互相转换
1.数组转化成list集合(采用java中集合自带的asList()方法就可以完成转换了) String[] array = new String[] {"123", " ...
- Guava 2.2-新集合类型
Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...
- Java中数组以及集合
2019独角兽企业重金招聘Python工程师标准>>> java中数组: 数组在Java里是一种特殊类型,有别于普通的"类的实例"的对象.但实际数组也是一种对象类 ...
最新文章
- antd 表单提交,文件和表单内容一起提交,表单校验
- mysql查询 伪列_Mysql数据库查询到的数据设置伪列显示
- ICCV 2021 | 重铸Regression荣光!具有残差对数似然估计的人体姿态回归
- 2016 CCPC 杭州
- 初中数学知识点总结_初中数学知识点总结大全_经典版_
- c语言 想输入非数字是报错误,C语言上机练习5C言上机练习5.doc
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
- Linux基础,命令的使用以及环境的安装,jdk,mysql,tomcat
- PCIE知识点-003:PCIE协议中的upstream概念
- 20135202闫佳歆——信息安全系统设计基础第七周学习总结
- hdmi线和vga线哪个好?用HDMI线和VGA线,显示屏画质到底相差多大?
- Snapchat面经
- index函数python查询所有_Python List index()方法
- 基于Gin+Vue+ElementUI实现的OA办公系统
- 如何生成数据库设计文档
- 布隆过滤器 布谷鸟过滤器 Redis 安装布隆过滤器
- ubuntu server 14.04 编译安装xen4.4.2配置vtpm(三)——创建DomU(a PV VM)
- 好以前写的一个java采集淘宝搜索页面商品数据的函数
- zzuli oj 1122 小明同学的调查作业
- 漏洞分析丨HEVD-0x2.StackOverflowGS[win7x86]
热门文章
- JAVA线程的interrupt
- angular路由笔记_Angular2学习笔记——路由器模型(Router)
- druid连接池初始化慢_从零开始手写 mybatis (三)jdbc pool 从零实现数据库连接池
- tl494组成的超声波发射电路_透彻分析利用TL494组成的逆变器电路
- tomcat跳转报错_微信小程序开发:使用reLaunch跳转时报错的解决步骤
- oracle notes,Oracle Notes
- Codeforces 991E. Bus Number (DFS+排列组合)
- libevent源码学习-----event操作
- hbase启动报错Permission denied: user=xxx, access=WRITE, inode=“/HBase/MasterProcWALs“:root:supergroup:d
- java hashmap 输出_JAVA如何把HashMap内容输出到文本文件