正在做的项目里面有需要把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相关推荐

  1. [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...

    点击下载 ConvertJson.rar 本类实现了  C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json| 等功能 大 ...

  2. 二:C#对象、集合、DataTable与Json内容互转示例;

    导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型:    二:C#对象.集合.DataTable与Json内容互转示例: ...

  3. python列表转化为元组、集合_如何在Python中将元组列表更改为集合?

    我在Python中创建了一个函数,它返回抛出2个骰子的所有可能结果的列表. 元组列表:[(1,1),(1,2),-,(6,6)].在 然后我写了一个函数来找出两个值之和为偶数的所有元素(a),另一个函 ...

  4. c#将list集合转换为datatable的简单办法

    public static class ExtensionMethods         {         /// <summary>         /// 将List转换成DataT ...

  5. 【机房收费个人版】DataTable 与泛型集合的较量

    将近三周的时间,我学到了很多知识,让我受益匪浅!也通过这三周的积累和整理,现在是时候写博客分享我的所知所得了..下面主要写DataTable.泛型集合以及它们之间的比较.. DataTable     ...

  6. Struts2 官方教程之Struts Tags(六)——Generic Tags(Control Tags )

    开头要说的:在早期的应用开发中,表现层Jsp页面主要使用Jsp脚本来控制输出.这样,在Jsp中嵌套了java脚本,这种方式不管是可读性还是可维护性都很差,几乎使Jsp成为Java的子集.从Jsp1.1 ...

  7. List集合与Array数组之间的互相转换

    1.数组转化成list集合(采用java中集合自带的asList()方法就可以完成转换了) String[] array = new String[] {"123", " ...

  8. Guava 2.2-新集合类型

    Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...

  9. Java中数组以及集合

    2019独角兽企业重金招聘Python工程师标准>>> java中数组: 数组在Java里是一种特殊类型,有别于普通的"类的实例"的对象.但实际数组也是一种对象类 ...

最新文章

  1. antd 表单提交,文件和表单内容一起提交,表单校验
  2. mysql查询 伪列_Mysql数据库查询到的数据设置伪列显示
  3. ICCV 2021 | 重铸Regression荣光!具有残差对数似然估计的人体姿态回归
  4. 2016 CCPC 杭州
  5. 初中数学知识点总结_初中数学知识点总结大全_经典版_
  6. c语言 想输入非数字是报错误,C语言上机练习5C言上机练习5.doc
  7. Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
  8. Linux基础,命令的使用以及环境的安装,jdk,mysql,tomcat
  9. PCIE知识点-003:PCIE协议中的upstream概念
  10. 20135202闫佳歆——信息安全系统设计基础第七周学习总结
  11. hdmi线和vga线哪个好?用HDMI线和VGA线,显示屏画质到底相差多大?
  12. Snapchat面经
  13. index函数python查询所有_Python List index()方法
  14. 基于Gin+Vue+ElementUI实现的OA办公系统
  15. 如何生成数据库设计文档
  16. 布隆过滤器 布谷鸟过滤器 Redis 安装布隆过滤器
  17. ubuntu server 14.04 编译安装xen4.4.2配置vtpm(三)——创建DomU(a PV VM)
  18. 好以前写的一个java采集淘宝搜索页面商品数据的函数
  19. zzuli oj 1122 小明同学的调查作业
  20. 漏洞分析丨HEVD-0x2.StackOverflowGS[win7x86]

热门文章

  1. JAVA线程的interrupt
  2. angular路由笔记_Angular2学习笔记——路由器模型(Router)
  3. druid连接池初始化慢_从零开始手写 mybatis (三)jdbc pool 从零实现数据库连接池
  4. tl494组成的超声波发射电路_透彻分析利用TL494组成的逆变器电路
  5. tomcat跳转报错_微信小程序开发:使用reLaunch跳转时报错的解决步骤
  6. oracle notes,Oracle Notes
  7. Codeforces 991E. Bus Number (DFS+排列组合)
  8. libevent源码学习-----event操作
  9. hbase启动报错Permission denied: user=xxx, access=WRITE, inode=“/HBase/MasterProcWALs“:root:supergroup:d
  10. java hashmap 输出_JAVA如何把HashMap内容输出到文本文件