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与结构不同实体类之间的转换
在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我们怎么处理呢?可能有人会说,在转换时创建一个实体对象,对表里的数据逐行遍历来实例化这个实体对象不就完了.的 ...
随机推荐
- 解决JavaOpenCV的内存问题
在使用OpenCV时,程序总是在某个时间墨明棋妙地终止,打开CygWin ,输入 adb logcat ,查看打印的信息,发现是内存问题.经过反复的查找,发现使用OpenCV的java类库时,一定要慎 ...
- POJ_2063_完全背包
Investment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10090 Accepted: 3540 Descr ...
- git_安装与配置
安装 windows平台安装 在windows平台安装git,需要下载exe.文件,下载地址:https://gitforwindows.org/,双击下载的.exe文件,按照提示进行安装,安装完成后 ...
- Visual Studio 2015 开发 Linux 和树莓派 程序的 C++环境
可以创建 树莓派 和 linux控制台应用. 创建后的 readme , 有各个设置的说明 你需要输入你虚拟主机, 编译环境linux虚拟机 的简单配置,另外, 4月5日的版本 如果 你的linux ...
- json简介及josn数组中取字符
1.json字符串就是字符串,只不过格式是Json格式的,以键值对的形式存在,键和值可以是字符串,数字,空值,数组等. json对象在花括号中书写,一个json对象包含多个键值对,json对象以花括号 ...
- 通俗易懂之SpringMVC&Struts2前端拦截器详解
直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...
- lvs直接路由模式DR模式
1)实验所有关闭防火墙systemtcl stop firewalldsystemctl disable firewalldsetenforce 0iptables -F2)配置负载调度器配置虚拟IP ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- Codeforces Round #550 (Div. 3)E. Median String
把字符串看作是26进制的数,从后往前翻译,那么就可以把两个串变成对应的26进制的数字,那么只要把两个数加起来除以二就得到中间的串对应的数了,同理再转化回来就行了.但是这样会有一个问题就是串的长度有2e ...
- vue 项目部署到nginx
第一步在控制台终端输入npm run build 打包完成之后项目中会生成一个dist文件夹,直接访问里面的index.html就ok了 第二步配置nginx 第三步重启nginx service n ...