DataTable和List相互转换的类
DataTable与List相互转换
.NET后台数据处理,从数据库中的捞出的数据格式一般是List和DataTable的格式.现在将两种格式相互转换的心得记录下来以便以后查找(直接上代码).
public class ConvertHelper<T> where T : new()
{
//将DataTable转换为List
public static List<T> ConvertToList(DataTable dt)
{
// 定义集合
var ls = new List<T>();
// 获得此模型的类型
Type type = typeof(T);
//定义一个临时变量
string tempName = "";
//遍历DT数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] pros = t.GetType().GetProperties();
//遍历公共属性
foreach (PropertyInfo p in pros)
{
//属性名称传给临时变量
tempName = p.Name;
//检查DataTable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!p.CanWrite) continue;//该属性不可写,直接跳出
//取出该行该列的值
object value = dr[tempName];
//如果非空,则赋给对象的属性
if (value != DBNull.Value)
p.SetValue(t, value, null);
}
}
ls.Add(t);
}
return ls;
}
//获取List类型属性
public static List<PropertyInfo> GetPropertyInfo(List<T> tList)
{
T t = new T();
PropertyInfo[] tpro = t.GetType().GetProperties();
return tpro.ToList();
}
//将list转换为DataTable
public static DataTable ConvertToDataTable(List<T> list)
{
DataTable dt = new DataTable();//初始化DT
//var arrPro = GetPropertyInfo(list);
T t = new T();
var arrPro = t.GetType().GetProperties();
foreach (PropertyInfo pro in arrPro)
{
if (pro.CanWrite)//如果属性可以写入
dt.Columns.Add(pro.Name, pro.Name.GetType());//DT的添加列
}
for (var i = 0; i < list.Count(); i++)
{
DataRow newDr = dt.NewRow();
foreach (PropertyInfo p in arrPro)
{
if (p.CanWrite)
newDr[p.Name] = p.GetValue(list[i]);//新行的列赋值
}
dt.Rows.Add(newDr);
}
return dt;
}
}
DataTable和List相互转换的类的更多相关文章
- C# 将DataTable数据源转换成实体类
using System; using System.Collections.Generic; using System.Data; using System.Reflection; /// < ...
- DataTable转List<Model>通用类
/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...
- DataTable转List<Model>通用类【实体转换辅助类】
/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...
- DataReader,DataTable利用泛型填充实体类
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...
- C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...
- JSON对象与XML相互转换工具类
依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...
- DataTable转List,DataTable转为Model对象帮助类
DataTable转List,DataTable转为Model对象帮助类 public class ModelConvertHelper<T> where T : new() { publ ...
- (转)DataTable与结构不同实体类之间的转换
原文地址:http://www.cnblogs.com/kinger906/p/3428855.html 在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我 ...
- DataTable与结构不同实体类之间的转换
在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我们怎么处理呢?可能有人会说,在转换时创建一个实体对象,对表里的数据逐行遍历来实例化这个实体对象不就完了.的 ...
随机推荐
- 12 Python+selenium对日期控件进行处理(采用执行JS脚本)
[环境信息] Python34+IE+windows2008 [说明] 1.对于日期控件,没有办法通过定位元素再直接传值的方式处理.可以采用执行JavaScript处理. PS:还要去学学js怎么写, ...
- 【sqli-labs】 less25 GET- Error based -All you OR&AND belong to us -string single quote(GET型基于错误的去除了or和and的单引号注入)
加单引号 order by一下 http://localhost/sqli-labs-master/Less-25/?id=1' order by 1%23 order by 变成了der by 下面 ...
- java操作Excel的poi的导出Excel表格
页面布局 点击导出用户:触发函数,直接访问后台 后台方法如下: public String export()throws Exception{ Connection con=null; try { c ...
- 【转载】java list的一些基本操作
1.list中添加,获取,删除元素 List<String> person=new ArrayList<>(); person.add("jackie"); ...
- xpath 获取深圳房源信息并导出csv
# -*- coding: utf-8 -*- # @Time : 2019/4/28 10:44 # @Author : wujf # @Email : 1028540310@qq.com # @F ...
- Day4 循环结构
for-in循环 如果明确的知道循环执行的次数或者是要对一个容器进行迭代(后面会讲到),那么我们推荐使用for-in循环,例如下面代码中计算$\sum_{n=1}^{100}n$. range函数用法 ...
- 进程(day09)
进程的管理 一.进程的基础 进程和程序的区别 每个进程有自己的pid.PCB 操作系统上运行的所有进程构成一颗树. 如何查看这颗树? pstree() 树根进程是init pid是 进程间的亲缘关系两 ...
- 06.系统编程-4.多线程和GIL
为什么有人会说 Python? 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程.多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋? 有同 ...
- Codeforces 899C - Dividing the numbers
传送门:http://codeforces.com/contest/899/problem/C 本题是一个数学问题——集合划分. 将集合{1,2,...,n}划分成两个集合,使得两个集合的元素之和的绝 ...
- 10.Spring注解+MyBatis+Servlet
1.创建sql脚本 create table account ( id ) unsigned not null auto_increment primary key, account_number ) ...