C#之DataTable转List与List转Datatable
闲来无事,只有写代码啦,以下为DataTable转List与List转DataTable的两个方法,主要技术点用到了反射原理:
/// <summary>
/// 模型转换类
/// </summary>
public class ConvertModel
{
/// <summary>
/// DataTable转List
/// </summary>
/// <typeparam name="T">list中的类型</typeparam>
/// <param name="dt">要转换的DataTable</param>
/// <returns></returns>
public static List<T> DatatTableToList<T>(DataTable dt) where T : class, new()
{
List<T> list = new List<T>();
T t = new T();
PropertyInfo[] prop = t.GetType().GetProperties();
//遍历所有DataTable的行
foreach (DataRow dr in dt.Rows)
{
t = new T();
//通过反射获取T类型的所有成员
foreach (PropertyInfo pi in prop)
{
//DataTable列名=属性名
if (dt.Columns.Contains(pi.Name))
{
//属性值不为空
if (dr[pi.Name] != DBNull.Value)
{
object value = Convert.ChangeType(dr[pi.Name], pi.PropertyType);
//给T类型字段赋值
pi.SetValue(t, value, null);
}
}
}
//将T类型添加到集合list
list.Add(t);
}
return list; } /// <summary>
/// List转换为DataTable
/// </summary>
/// <typeparam name="T">List中的类型</typeparam>
/// <param name="list">要转换的list</param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(List<T> list) where T : class
{
DataTable dt = new DataTable();
PropertyInfo[] prop = typeof(T).GetProperties();
DataColumn[] ColumnArr = prop.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray();
dt.Columns.AddRange(ColumnArr);
foreach (T t in list)
{
DataRow dr = dt.NewRow();
foreach (PropertyInfo pi in prop)
{
if (dt.Columns.Contains(pi.Name))
{
if (pi.GetValue(t) != null)
{
dr[pi.Name] = pi.GetValue(t);
}
}
}
dt.Rows.Add(dr);
} return dt;
}
}
调用:
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Sex");
dt.Columns.Add("Age");
dt.Columns.Add("Height");
DataRow dr = dt.NewRow();
dr["Id"] = ;
dr["Sex"] = ;
dr["Age"] = ;
dr["Height"] = ;
dt.Rows.Add(dr);
//将DataTable转换为List<Persion>
List<Persion> list1 = ConvertModel.DatatTableToList<Persion>(dt); List<Persion> list = new List<Persion>()
{
new Persion(){Id=,Sex=,Age=,Height=},
new Persion(){Id=,Sex=,Age=,Height=},
};
//将List<Persion>转换为DataTable
DataTable dt1 = ConvertModel.ListToDataTable<Persion>(list);
C#之DataTable转List与List转Datatable的更多相关文章
- C# DataTable转List And List转DataTable
// DataTable转List: IList<HousesEntity> Ilist = TableAndList.ConvertTo<HousesEntity>(dt); ...
- “DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用
“DataTable”是“System.Data.DataTable”和“Microsoft.Office.Interop.Excel.DataTable”之间的不明确的引用 造成这个错误的原因是,在 ...
- 多个不同的表合并到一个datatable中,repeater在绑定datatable
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- 将两个列不同的DataTable合并成一个新的DataTable
/// <summary> /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable /// </summary> ...
- C#给DataTable添加序号、C#给DataTable添加合计、小计
/// <summary> /// 给DataTable添加序号 /// </summary> /// <param name= ...
- Datatable的查找和排序(Datatable.Select)
Datatable 是一种常用的数据结构.数据类型有点类似于数据库中的表结构.在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object. ...
- EasyUI - Datatable转Json and Json转Datatable
using System; using System.Data; using System.Linq; using System.Collections; using System.Collectio ...
- C# 将DataTable一行放入另一个DataTable中
http://blog.csdn.net/huyu107/article/details/53509171 概述 从一个DataTable中取一行放到另一个DataTable里报错: 该行已经属于另一 ...
- NPOI json转Excel DataTable转Excel ,Excel转DataTable
JsonToExcel: public static void JsonToExcel(List<Dictionary<string, object>> json, strin ...
随机推荐
- 如何在SecureCRT中给linux上传和下载文件 安装redis
首先建立文件 /download sz和rz命令无法用.则用以下1.和2.3步骤 需要上传或者下载,需要使用rz和sz命令.如果linux上没有这两个命令工具,则需要先安装.可以使用yum安装.运 ...
- 常用Windows DOS命令项目部署经常用到
img { max-width: 100% } 前两天部署.netcore项目,首先是生产环境域名访问不了,再到.netcore项目IIS部署502.5,在到莫名其妙的500,在排查项目部署问题的时候 ...
- [学习OpenCV攻略][005][视频播放控制]
cvSetCaptureProperty(视频,属性,属性值) 设置视频的属性,属性可以是宏CV_CAP_PROP_POS_FRAMES 视频帧的位置 cvGetCaptureProperty(视频, ...
- 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项
1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号 工号 姓名 310110xxxx220130004 101 傅家宜3101 ...
- SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFact ...
- APACHE 服务器开启URL REWRITE模块的方法
最近做wordpress,发现固定链接总是设置不了.后来发现是由于apache服务器的URL REWIRITE模块没有开启导致. 查询了资料之后终于设置成功,记录下步骤: 1:开启apache的url ...
- phpstorm 怎么实现分屏展示
- arclistsg文档独立模型标签
[标签名称] arclistsg [标签简介] 单表独立模型的文档列表调用标记 [功能说明] 用于调用单表模型的内容,在V5.3系统以上版本中加入了单表模型的概念,脱离了以前的主从表的数据表关联结构, ...
- lodash源码分析之缓存使用方式的进一步封装
在世界上所有的民族之中,支配着他们的喜怒选择的并不是天性,而是他们的观点. --卢梭<社会与契约论> 本文为读 lodash 源码的第九篇,后续文章会更新到这个仓库中,欢迎 star:po ...
- 读书笔记之《Java编程思想》
17. 容器 Set 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素. Set接口不保证维护元素的次序 Map 映射表(关联数组)的基本思想是维护的是键-值(对)关联,因此可以用键来查找 ...