对象充当List成员时:

/// <summary>

/// 将泛类型集合List类转换成DataTable

/// </summary>

/// <param name="list">泛类型集合</param>

/// <returns></returns>

public static DataTable ListToDataTable<T>(List<T> entitys)

{

//检查实体集合不能为空

if (entitys == null || entitys.Count < 1)

{

throw new Exception("需转换的集合为空");

}

//取出第一个实体的所有Propertie

Type entityType = entitys[0].GetType();

PropertyInfo[] entityProperties = entityType.GetProperties();

//生成DataTable的structure

//生产代码中,应将生成的DataTable结构Cache起来,此处略

DataTable dt = new DataTable();

for (int i = 0; i < entityProperties.Length; i++)

{

//dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);

dt.Columns.Add(entityProperties[i].Name);

}

//将所有entity添加到DataTable中

foreach (object entity in entitys)

{

//检查所有的的实体都为同一类型

if (entity.GetType() != entityType)

{

throw new Exception("要转换的集合元素类型不一致");

}

object[] entityValues = new object[entityProperties.Length];

for (int i = 0; i < entityProperties.Length; i++)

{

entityValues[i] = entityProperties[i].GetValue(entity, null);

}

dt.Rows.Add(entityValues);

}

return dt;

}

数组充当List成员时:

public static DataTable ListArrayToDataTable(List<string[]> entitys, string[] colname = null)

{

//检查实体集合不能为空

if (entitys == null || entitys.Count < 1)

{

throw new Exception("需转换的集合为空");

}

DataTable dt = new DataTable();

if (colname != null)

{

if (colname.Length != entitys[0].Length)

throw new Exception("名称数组与成员数组维度不一致");

foreach (string nm in colname)

dt.Columns.Add(nm, typeof(string));

}

else

{

foreach (string nm in entitys[0])

dt.Columns.Add("", typeof(string));

}

//将所有entity添加到DataTable中

foreach (string[] entity in entitys)

{

if (entity.Length != entitys[0].Length)

{

throw new Exception("数组维度不一致");

}

dt.Rows.Add(entity);

}

return dt;

}

List转Datable(需区分对象充当List成员和数组充当List成员两种情况)的更多相关文章

  1. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

  2. 第一课:js命名空间的介绍,js对象的扩展以及js数组化

    1.命名空间: js里面的命名空间就是使用对象的属性来扩展的.比如,用户定义一个A对象,A对象下面有B属性和C属性,同时B属性和C属性又是对象.因此A={B:{},C:{}},这时用户就可以在B对象和 ...

  3. JS区分对象类型

    Object.prototype.toString.call() 区分对象类型 在JavaScript中数据类型分为:1.基本类型,2.引用类型 基本类型:Undefined,Boolean,Stri ...

  4. Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型

    转自:https://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 概述 LOB 代表大对象数据,包括 BLOB 和 CL ...

  5. 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?

    当你看见这个标题的时候,你可能会下意识的去想一下,这两种方式到底有什么样的区别呢? 且看下面的demo,自然便区分开了 /** * */ package com.b510.test; /** * Pr ...

  6. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  7. JavaScript中的两种全局对象

    这里总结的东西特别适合先学习c/c++, Java这类标准语言再学JS的童鞋们看,因为JS在程序执行之前就会初始化一个全局对象,这个全局对象到底是什么是跟JS程序运行环境有关的. 根据JavaScri ...

  8. Java中对象拷贝的两种方式

    引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...

  9. 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

    查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...

随机推荐

  1. 【codevs2011】最小距离之和 [LNOI2013](Floyd)

    题目网址:http://codevs.cn/problem/2011/ 题目大意:有一个图,每次删一条边(可以重复删),求每次删边之后所有点对的最短距离之和. 看了一眼题目,顿时发现了O(n^4)的暴 ...

  2. 分布式服务管理zookeeper的java api

    zookeeper是一个分布式服务管理工具,本身具备高可用性,很多知名分布式系统入hadoop.Hbase等都采用zk管理. 常见的两个应用场景:1.服务的注册与发现 2.集群统一配置 下面看一下使用 ...

  3. R语言笔记003——set.seed()函数

    set.seed()函数 set.seed()设定生成随机数的种子,让样本可重复. > x<-rnorm() # 生成4个随机数 > x [] 0.6599492 0.5881863 ...

  4. DataX的安装

    DataX的安装 1. 可下载tar包 https://github.com/alibaba/DataX/blob/master/userGuid.md 2. 下载源码自己编译 git clone h ...

  5. .gitignore 无效

    利用.gitignore过滤文件,如编译过程中的中间文件,等等,这些文件不需要被追踪管理. 现象: 在.gitignore添加file1文件,以过滤该文件,但是通过Git status查看仍显示fil ...

  6. SBT搭建Spark

    http://www.cnblogs.com/yongjian/p/6211007.html http://www.aboutyun.com/thread-8587-1-1.html http://b ...

  7. poj 1011 :Sticks (dfs+剪枝)

    题意:给出n根小棒的长度stick[i],已知这n根小棒原本由若干根长度相同的长木棒(原棒)分解而来.求出原棒的最小可能长度. 思路:dfs+剪枝.蛮经典的题目,重点在于dfs剪枝的设计.先说先具体的 ...

  8. ROS创建工作空间

    1.$mkdir catkin_ws && cd catkin_ws && mkdir src 2.$catkin_make   (#这一句是完成编译初始化,注意括号内 ...

  9. phalcon: 开启模板缓存和缓存路径

    /** * 设置view */ $di->set('view', function () use ($config) { $view = new \Phalcon\Mvc\View(); $vi ...

  10. 解决PasswordBox的Password非依赖属性,而无法绑定的问题,以及常规命令如何使用

    http://stackoverflow.com/questions/1483892/how-to-bind-to-a-passwordbox-in-mvvm