DataTable与List<T>互转

1.List<T>转DataTable


  1. public static DataTable ListToDataTable<T>(List<T> list)
  2. {
  3. if(list==null || list.Count==)
  4. {
  5. return new DataTable();
  6. }
  7. //获取T下所有的属性
  8. Type entityType = list[].GetType();
  9. PropertyInfo[] entityProperties = entityType.GetProperties();
  10.  
  11. DataTable dt = new DataTable("data");
  12. for(int i=; i<entityProperties.Length; i++)
  13. {
  14. dt.Columns.Add(entityProperties[i].Name);
  15. }
  16. foreach (var item in list)
  17. {
  18. if(item.GetType() != entityType)
  19. {
  20. throw new Exception("要转换集合元素类型不一致!")
  21. }
  22. //创建一个用于放所有属性值的数组
  23. object[] entityValues = new object[entityProperties.Length];
  24. for(int i=; i<entityProperties.Length; i++)
  25. {
  26. entityValues[i] = entityProperties[i].GetValue(item, null);
  27. }
  28.  
  29. dt.Rows.Add(entityValues)
  30. }
  31. return dt;
  32. }

2.DataTable转List<T>


  1. public static IList<T> ConvertToModel(DataTable dt)
  2. {
  3. // 定义集合
  4. IList<T> ts = new List<T>();
  5. // 获得此模型的类型
  6. Type type = typeof(T);
  7. string tempName = "";
  8. foreach (DataRow dr in dt.Rows)
  9. {
  10. T t = new T();
  11. // 获得此模型的公共属性
  12. PropertyInfo[] propertys = t.GetType().GetProperties();
  13. foreach (PropertyInfo pi in propertys)
  14. {
  15. tempName = pi.Name; // 检查DataTable是否包含此列
  16. if (dt.Columns.Contains(tempName))
  17. {
  18. // 判断此属性是否有Setter
  19. if (!pi.CanWrite) continue;
  20. object value = dr[tempName];
  21. if (value != DBNull.Value)
  22. pi.SetValue(t, value, null);
  23. }
  24. }
  25. ts.Add(t);
  26. }
  27. return ts;
  28. }

【C#常用方法】1.DataTable与List<T>的相互转换的更多相关文章

  1. C#中DataTable与XML格式的相互转换

    1.DataTable转换成XML public string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; ...

  2. DataTable / DataSet 与 xml 的相互转换

    之前做DataTable和DataSet转xml一直使用XmlSerializer 序列化完成.今天发现新方法,哇咔咔方便了很多.还不用担心Name为空时报错 static void Main(str ...

  3. C#开发中常用方法2------json转DataTable

    /// <summary>/// 将json转换为DataTable/// </summary>/// <param name="strJson"&g ...

  4. 一个DataTable赋值给另一个DataTable的常用方法

    DataView view = new DataView();view.Table = DataTableA;view.RowFilter = "itemType = 'book'" ...

  5. Newtonsoft.Json 与 DataTable的相互转换

    1.这里下载:http://www.newtonsoft.com/products/json/ 安装:    解压下载文件,得到Newtonsoft.Json.dll    在项目中添加引用 2.引入 ...

  6. DataTable数据与Excel表格的相互转换

    using Excel = Microsoft.Office.Interop.Excel; private static Excel.Application m_xlApp = null; /// & ...

  7. List<T> 和DataTable的相互转换

    我用的将集合类转换为DataTable 的方法 /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param ...

  8. 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】

    本篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGrid ...

  9. List,泛型和Datatable 的相互转换

    public static DataTable ToDataTableTow(IList list) { DataTable result = new DataTable(); ) { Propert ...

随机推荐

  1. Java的自动拆装箱与Integer的缓存机制

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10832303.html 一:基本类型与包装类型     我们知道,Java有8大基本数据类型,4整2浮1符1 ...

  2. linux系统最大TCP连接数限制

    2017-12-28 17:48:21 chenlin465373800 阅读数 16189    不太对 本博客为转载,原文请参见<a href="http://blog.51cto ...

  3. 可变lambda, lambda使用mutable关键字

    关于lambda的捕获和调用 C++ primer上对可变lambda举的例子如下: size_t v1=42; auto f=[v1] () mutable{return ++v1; }; v1=0 ...

  4. 后缀自动机专题(hihocoder)

    传送门 #1445 : 后缀自动机二·重复旋律5 题意: 给出字符串\(s\),询问字符串\(s\)中有多少不同的子串. 思路: 考虑对\(s\)建后缀自动机,那么\(\sum (len[i]-len ...

  5. oracle在windows(含客户端工具pl/sql安装)下安装

    安装Oracle服务器端 系统默认创建的数据库名称为orcl,可自行修改. 全局数据库名(用来唯一标示Oracle数据库,每个数据库至少由一个Oracle系统标识符(SID)引用),orcl,后面称为 ...

  6. postgres9.5.3升级postgres11.6

    附上postgres下载地址: https://yum.postgresql.org/11/redhat/rhel-7-x86_64/repoview/postgresqldbserver11.gro ...

  7. iptables man手册翻译

    概要 iptables [-t table] -[AD] chain rule-specification [options]iptables [-t table] -I chain [rulenum ...

  8. Kdtree原理以及 vs Octree

    1. Kdtree原理 Kdtree是一种划分k维数据空间的数据结构,本质也是一颗二叉树,只不过每个节点的数据都是k维,当k=1时,就是图1所示的普通二叉树. 图1 1)Kdtree的建立 建立Kdt ...

  9. Navicat连接mysql数据库2003-Can't connect to Mysql server on 'xxx' (10060 "Unknown error")

    使用root账号连接MySQL 1,登录 mysql -u用户名 -p                回车后输入密码 2, use mysql 3,输入下面命令,显示root为localhost本地登 ...

  10. [技术博客]海报图片生成——小程序canvas画布

    目录 背景介绍 canvas简介 代码实现 难点讲解 圆角矩形裁剪失败之PS的妙用 编码不要过硬 对过长的文字进行截取 真机首次生成时字体不对 drawImage只能使用本地图片 背景介绍 目标:利用 ...