对象充当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. [转]Android:改变Activity切换方式

    overridePendingTransition(enterAnim, exitAnim); Intent intent =new Intent(this,item2.class); startAc ...

  2. 分布式技术 memcached

    memcached 是一个高性能的分布式内存对象缓存系统,用于动态web应用,以减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.memcache ...

  3. PAT1023. Have Fun with Numbers (20)

    #include <iostream> #include <map> #include <algorithm> using namespace std; strin ...

  4. 初识Django---视图

    MTV模型 一.Django的MTV分别代表:         Model(模型):负责业务对象与数据库的对象       Template(模板):负责如何把页面展示给用户      View(视图 ...

  5. matplotlib画子图时设置总标题

    matplotlib subplots绘图时 设置总标题 :fig.suptitle(name)

  6. 通过YUM命令查找对应命令是通过何种软件提供的

    # yum whatprovides [命令]

  7. PostgreSQL的日志文件介绍

    PostgreSQL的日志文件 pg_log:数据库活动日志(也就是数据库的操作日志): pg_xlog:事务日志: pg_clog:事务状态日志(pg_clog是pg_xlog的辅助日志). 现在主 ...

  8. SQL Server 中WITH (NOLOCK)浅析(转)

    概念介绍  开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用 ...

  9. Prism 文档 第二章 初始化Prism应用程序

                                                                           第二章 初始化Prism应用程序 本章将讨论为了使一个Pr ...

  10. c#加密,java解密(3DES加密)

    c#代码 using System; using System.Security; using System.Security.Cryptography; using System.IO; using ...