在开发过程过程中有时候需要将List<T>泛型转换成DataTable、DataSet,可以利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值。

1、List<T>泛型转换成DataTable 代码:

        /// <summary>
/// List<T>转换成DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="dataList">集合数据</param>
/// <returns>返回DataTable</returns>
public static System.Data.DataTable ToDataTable<T>(this System.Collections.Generic.IList<T> list, System.Collections.Generic.IList<T> dataList) where T : class ,new()
{
if (dataList == null || !dataList.Any())
{
return null;
}
Type type = typeof(T);
System.Data.DataTable dt = new System.Data.DataTable(type.Name);
System.Reflection.PropertyInfo[] propertyInfoArray = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (T t in dataList.Where(t => t != null))
{
System.Data.DataRow row = dt.NewRow();
for (int i = , j = propertyInfoArray.Length; i < j; i++)
{
System.Reflection.PropertyInfo propertyInfo = propertyInfoArray[i];
string name = propertyInfo.Name;
if (dt.Columns[name] == null)
{
System.Data.DataColumn column = new System.Data.DataColumn(name, propertyInfo.PropertyType);
dt.Columns.Add(column);
}
row[name] = propertyInfo.GetValue(t, null);
}
dt.Rows.Add(row);
}
return dt;
}

2、List<T>泛型转换成DataSet 代码:

         /// <summary>
/// List<T>转换成DataSet
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="dataList">集合数据</param>
/// <returns>返回DataSet</returns>
public static System.Data.DataSet ToDataSet<T>(this System.Collections.Generic.IList<T> list, System.Collections.Generic.IList<T> dataList) where T : class ,new()
{
if (dataList == null || !dataList.Any())
{
return null;
}
Type type = typeof(T);
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.DataTable dt = new System.Data.DataTable(type.Name);
System.Reflection.PropertyInfo[] propertyInfoArray = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (T t in dataList.Where(t => t != null))
{
System.Data.DataRow row = dt.NewRow();
for (int i = , j = propertyInfoArray.Length; i < j; i++)
{
System.Reflection.PropertyInfo propertyInfo = propertyInfoArray[i];
string name = propertyInfo.Name;
if (dt.Columns[name] == null)
{
System.Data.DataColumn column = new System.Data.DataColumn(name, propertyInfo.PropertyType);
dt.Columns.Add(column);
}
row[name] = propertyInfo.GetValue(t, null);
}
dt.Rows.Add(row);
}
ds.Tables.Add(dt);
return ds;
}

.Net中List<T> 泛型转成DataTable、DataSet的更多相关文章

  1. list泛型转换成datatable

    public DataTable ListToDataTable<T>(List<T> list) { DataTable dt = new DataTable("C ...

  2. DataSet 中的数据排序 及 DataRow装成DataTable

    1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...

  3. List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

    public class ConvertX { #region 将集合类转换成DataTable /// <summary> /// 将集合类转换成DataTable /// </s ...

  4. SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable

    MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...

  5. 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel

    步骤: 一.前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来 <!--导出Excel--> <script type="text/javascript&qu ...

  6. [工具类]泛型集合转换为DataTable

    写在前面 在实际项目中,用到了将集合转换为DataTable,就试着封装了一个方法,记录一下. 代码 using System; using System.Collections.Generic; u ...

  7. 泛型集合转换为DataTable

    在做项目中,遇到了将集合转换为DataTable的使用,在网上看了资料,在这里记录下来,分享. using System; using System.Collections.Generic; usin ...

  8. 将Xml字符串转换成(DataTable || DataSet || XML)对象

    今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...

  9. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...

随机推荐

  1. vps_centos_7_系统环境常规配置备忘

    1.设置时区(东八区) 1> 选择亚洲东八区北京时间:tzselect (按照提示选择指定的序号直到北京时间) 2>替换时区文件 :cp /usr/share/zoneinfo/Asia/ ...

  2. From cls答辩

    我没有想过有一天会因为wjmzbmr而开一篇. 因为看到了cls答辩的链接而震撼或是感动. 可能也跟最近身心比较疲惫有关...容易产生这样那样的感触... cls可能已不是我们这代OIER所能膜到的了 ...

  3. 缺少.lib文件导致的Link2019 解决方案汇总

    环境Vs2015,  Win10 添加lib的方法在末尾 下面的错误都是我在写Direct3D程序中遇到的, 记下来方便查找 4.ws2_32.lib 3.   version.lib _GetFil ...

  4. React 组件性能优化

    React组件性能优化 前言 众所周知,浏览器的重绘和重排版(reflows & repaints)(DOM操作都会引起)才是导致网页性能问题的关键.而React虚拟DOM的目的就是为了减少浏 ...

  5. jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval("("+data+")"); 报错)

    $.ajax({    contentType: "application/x-www-form-urlencoded;charset=UTF-8" ,    type: &quo ...

  6. Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32

    今天使用Git在命令行下更新代码遇到了问题,起初觉得是自己安装某软件导致冲突,从网上搜索了一下找到类似问题,成功解决问题. 错误信息如下: E:\storm-sql>git pull origi ...

  7. 关于CSS3的小知识点之2D变换

        transition过渡 transition-duration:; 运动时间 transition-delay:; 延迟时间 transition-timing-function:; 运动形 ...

  8. mysql主从复制配置

    使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3. ...

  9. Mariadb数据库设置及操作 一主多从 备份还原(实测笔记)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 数据库版本信息 : 10.1.20- ...

  10. Allegro之Enhance pad Entry(增强焊盘进入约束功能)的使用

    pcb布线时,有时候会从器件的焊盘往外拉线,为了避免出现类似情况 出现锐角焊盘内绕线等等 可在add connect操作下,右键勾选Enhance pad Entry来增强焊盘进入的约束,可有效防止上 ...