[工具类]DataTable与泛型集合List互转
写在前面
工作中经常遇到datatable与list,对于datatable而言操作起来不太方便。所以有的时候还是非常希望通过泛型集合来进行操作的。所以这里就封装了一个扩展类。也方便使用。
类
方法中主要使用了反射的方式动态的为属性赋值以及取值。
public static class Extension{/// <summary>/// 将datatable转换为泛型集合/// </summary>/// <typeparam name="TEntity"></typeparam>/// <param name="inputDataTable"></param>/// <returns></returns>public static List<TEntity> ToList<TEntity>(this DataTable inputDataTable) where TEntity : class,new(){if (inputDataTable == null){throw new ArgumentNullException("input datatable is null");}Type type = typeof(TEntity);PropertyInfo[] propertyInfos = type.GetProperties();List<TEntity> lstEntitys = new List<TEntity>();foreach (DataRow row in inputDataTable.Rows){object obj = Activator.CreateInstance(type);foreach (PropertyInfo pro in propertyInfos){foreach (DataColumn col in inputDataTable.Columns){//如果直接查询的数据库,数据库是不区别大小写的,所以转换为小写忽略大小写的问题if (col.ColumnName.ToLower().Equals(pro.Name.ToLower())){//属性是否是可写的,如果是只读的属性跳过。if (pro.CanWrite){//判断类型,基本类型,如果是其他的类属性if (pro.PropertyType == typeof(System.Int32)){pro.SetValue(obj, Convert.ToInt32(row[pro.Name.ToLower()]));}else if (pro.PropertyType == typeof(System.String)){pro.SetValue(obj, row[pro.Name.ToLower()].ToString());}else if (pro.PropertyType == typeof(System.Boolean)){pro.SetValue(obj, Convert.ToBoolean(row[pro.Name.ToLower()]));}else if (pro.PropertyType == typeof(System.DateTime)){pro.SetValue(obj, Convert.ToDateTime(row[pro.Name.ToLower()]));}else if (pro.PropertyType == typeof(System.Int64)){pro.SetValue(obj, Convert.ToInt64(row[pro.Name.ToLower()]));}else{pro.SetValue(obj, row[pro.Name.ToLower()]);}}}}}TEntity tEntity = obj as TEntity;lstEntitys.Add(tEntity);}return lstEntitys;}/// <summary>/// 将list转换为datatable/// </summary>/// <typeparam name="TEntity"></typeparam>/// <param name="inputList"></param>/// <returns></returns>public static DataTable ToDataTable<TEntity>(this List<TEntity> inputList) where TEntity : class,new(){if (inputList == null){throw new ArgumentNullException("inputList");}DataTable dt = null;Type type = typeof(TEntity);if (inputList.Count == 0){dt = new DataTable(type.Name);return dt;}else{dt=new DataTable();}PropertyInfo[] propertyInfos = type.GetProperties();foreach (var item in propertyInfos){dt.Columns.Add(new DataColumn() { ColumnName = item.Name, DataType = item.PropertyType });}foreach (var item in inputList){DataRow row = dt.NewRow();foreach (var pro in propertyInfos){row[pro.Name] = pro.GetValue(item);}dt.Rows.Add(row);}return dt;}
总结
有些时候能偷懒就偷懒了,把常用的工具类自己封装下,下次使用的时候拿来用就可以了。
博客地址: | http://www.cnblogs.com/wolf-sun/ |
博客版权: |
本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5018901.html |
[工具类]DataTable与泛型集合List互转相关推荐
- 【机房收费个人版】DataTable 与泛型集合的较量
将近三周的时间,我学到了很多知识,让我受益匪浅!也通过这三周的积累和整理,现在是时候写博客分享我的所知所得了..下面主要写DataTable.泛型集合以及它们之间的比较.. DataTable ...
- sqlite工具类 java_Java之泛型、集合工具类
集合工具类 在我们讲完常用的基本集合后,我们就要介绍下位于java.util包下的collections类,注意:我们之前的collection是集合的接口,而collections是一个类.coll ...
- Java工具类、异常和集合(温习知识点)
今日内容 * 工具类* API* Object类* String类* StringBuffer类* StringBuilder类* Math类* Array类* System类* 包装类* BigIn ...
- java list排序工具类_java 之 Collections集合工具类排序
数组有工具类Arrays,集合也有一个工具类Collections. sort方法: sort(List list):根据其元素natural ordering对制定的列表进行排序 sort(List ...
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
- Java学习day18-集合框架2(泛型,工具类,TreeMap)
集合框架2 今日目标 一.泛型 1.泛型类 2.泛型接口 3.泛型方法 4.泛型通配符 二.集合工具类 三.TreeMap和TreeSet 作业: 今日目标 泛型 集合工具类 自带排序集合 一.泛型 ...
- java 集合反射_关于granite源码包CollectionUtil集合工具类获取集合反射类型、实例化各种集合类型HashSet/ArrayList等...
一.前言 基于granite源码包org.granite.util.CollectionUtil集合工具类,分别获取集合反射类型java.lang.reflect.Type.实例化newCollect ...
- [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...
- 【集合工具类:Collections】
集合工具类:Collections (1) 是针对集合进行操作的工具类 (2) 面试题:Collection 和 Collections 的区别 A:Collection 是单列集合的顶层接口,有两个 ...
最新文章
- 机器学习最常用的优化算法 — 梯度下降法
- mysql之基础操作grant、show、repair、log_error等
- java 短路判断_随笔 | 奇淫技巧 | Java:记 return 和短路运算符的妙用
- JavsScript中比较大小总结---基于sort()方法
- 让vs2008支持jQuery的智能提示!
- c语言 在执行区域没有空格,C语言上机操作指导之TurboC.doc
- java mysql blob 存储图片_Java操作mysql存储图片
- C++自学-默认参数的函数
- 基于 webdriver 的测试代码日常调试方python 篇
- Pomodoro Do - 拖延症患者的福音
- PS绘画蒙板使用方法
- 集合:List接口:ArrayList,LinkedList Set接口:HashSet
- leetcode954.二倍数对数组C++(绝对值排序)
- 差分放大电路的基本工作原理是什么//2021-2-18
- CSGO手套武器箱直接卖还是开了再卖?
- 手把手教你搭建一个直播服务器(Nginx+Rtsp)
- 2020李宏毅深度学习hw1
- 计算机word怎么选中全文,word选定全文快捷键是什么
- 源码解读之Pre-train
- 2022-2027年中国集团幼儿园行业市场深度分析及投资战略规划报告
热门文章
- 小白设计模式:桥接模式
- 贴一个数据结构老师布置的作业(各种排序) c 语言实现
- AndroidStudio安卓原生开发_UI控件_SeekBar_ProgressBar_DataPicker---Android原生开发工作笔记99
- 持续集成部署Jenkins工作笔记0004---Subversion环境要求
- JAVA线程池_并发队列工作笔记0004---Callable原理_多线程执行Callable任务
- Netty工作笔记0010---Channel应用案例1
- SpringCloud工作笔记071---mysql字符集 utf8 和utf8mb4 的区别_utf8是不能存储emoji表情字符集的
- SpringCloud工作笔记039---spring cloud、javaweb中获取request对象的几种方法
- viso stido 在图上写字
- 在实验室服务器毫无阻拦的安装pip3