对象充当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. P3391 文艺平衡树

    hh 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...

  2. java JSON 序列化类(List<Object> 转String)

    import com.alibaba.fastjson.JSONObject; import com.google.common.base.Preconditions; import com.goog ...

  3. C#加密解密DES字符串<转>

    using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptograph ...

  4. js运算符、关键字、保留字、转义字符

  5. Linux嵌入式 -- 内核 (arm) & 文件系统

    1. make distclean 2. 配置内核  ----> 生成 .config文件 make menuconfig ARCH=arm Makefile文件分析: 3.  编译内核 mak ...

  6. c++ Const关键字

    转自:http://blog.csdn.net/Eric_Jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根 ...

  7. java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)

    使用方法测试时出现以下错误 java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.v ...

  8. winform里面的label怎么样实现,字上删除的效果

    label属性里的Font方法理由 Strikeout 选成True 就行了 button1_Click(object sender, EventArgs e) { Graphics g = Grap ...

  9. Hello Swift

    第一个Swift作品,HelloSwift,呵呵.你会把原来的项目用swift改写吗?

  10. RK30SDK开发板驱动分析(一):platform device 的概念与注册

    做过51单片机或者ARM开发的人都知道,单片机内部都有自己的“片内外设”,比如UART,比如I2C,比如SPI等等... 写单片机程序的时候,比如对于UART的驱动,我们都是在程序中直接写一套函数,来 ...