C# Table转换List 或List转换Table

  1 public static class TableListHelper
  2     {
  3
  4         /// <summary>
  5         /// 转化一个DataTable
  6         /// </summary>
  7         /// <typeparam name="T"></typeparam>
  8         /// <param name="list"></param>
  9         /// <returns></returns>
 10         public static DataTable ToDataTable<T>(this IEnumerable<T> list)
 11         {
 12             //创建属性的集合
 13             List<PropertyInfo> pList = new List<PropertyInfo>();
 14             //获得反射的入口
 15             Type type = typeof(T);
 16             DataTable dt = new DataTable();
 17             //把所有的public属性加入到集合 并添加DataTable的列
 18             Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
 19             foreach (var item in list)
 20             {
 21                 //创建一个DataRow实例
 22                 DataRow row = dt.NewRow();
 23                 //给row 赋值
 24                 pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
 25                 //加入到DataTable
 26                 dt.Rows.Add(row);
 27             }
 28             return dt;
 29         }
 30
 31
 32         /// <summary>
 33         /// DataTable 转换为List 集合
 34         /// </summary>
 35         /// <typeparam name="TResult">类型</typeparam>
 36         /// <param name="dt">DataTable</param>
 37         /// <returns></returns>
 38         public static List<T> ToList<T>(this DataTable dt) where T : class, new()
 39         {
 40             //创建一个属性的列表
 41             List<PropertyInfo> prlist = new List<PropertyInfo>();
 42             //获取TResult的类型实例  反射的入口
 43
 44             Type t = typeof(T);
 45
 46             //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表
 47             Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
 48
 49             //创建返回的集合
 50
 51             List<T> oblist = new List<T>();
 52
 53             foreach (DataRow row in dt.Rows)
 54             {
 55                 //创建TResult的实例
 56                 T ob = new T();
 57                 //找到对应的数据  并赋值
 58                 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
 59                 //放入到返回的集合中.
 60                 oblist.Add(ob);
 61             }
 62             return oblist;
 63         }
 64
 65
 66         /// <summary>
 67         /// 将集合类转换成DataTable
 68         /// </summary>
 69         /// <param name="list">集合</param>
 70         /// <returns></returns>
 71         public static DataTable ToDataTableTow(IList list)
 72         {
 73             DataTable result = new DataTable();
 74             if (list.Count > 0)
 75             {
 76                 PropertyInfo[] propertys = list[0].GetType().GetProperties();
 77
 78                 foreach (PropertyInfo pi in propertys)
 79                 {
 80                     result.Columns.Add(pi.Name, pi.PropertyType);
 81                 }
 82                 for (int i = 0; i < list.Count; i++)
 83                 {
 84                     ArrayList tempList = new ArrayList();
 85                     foreach (PropertyInfo pi in propertys)
 86                     {
 87                         object obj = pi.GetValue(list[i], null);
 88                         tempList.Add(obj);
 89                     }
 90                     object[] array = tempList.ToArray();
 91                     result.LoadDataRow(array, true);
 92                 }
 93             }
 94             return result;
 95         }
 96
 97
 98         /// <summary>
 99         /// 将泛型集合类转换成DataTable
100         /// </summary>
101         /// <typeparam name="T">集合项类型</typeparam>
102         /// <param name="list">集合</param>
103         /// <param name="propertyName">需要返回的列的列名</param>
104         /// <returns>数据集(表)</returns>
105         public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
106         {
107             List<string> propertyNameList = new List<string>();
108             if (propertyName != null)
109                 propertyNameList.AddRange(propertyName);
110             DataTable result = new DataTable();
111             if (list.Count > 0)
112             {
113                 PropertyInfo[] propertys = list[0].GetType().GetProperties();
114                 foreach (PropertyInfo pi in propertys)
115                 {
116                     if (propertyNameList.Count == 0)
117                     {
118                         result.Columns.Add(pi.Name, pi.PropertyType);
119                     }
120                     else
121                     {
122                         if (propertyNameList.Contains(pi.Name))
123                             result.Columns.Add(pi.Name, pi.PropertyType);
124                     }
125                 }
126
127                 for (int i = 0; i < list.Count; i++)
128                 {
129                     ArrayList tempList = new ArrayList();
130                     foreach (PropertyInfo pi in propertys)
131                     {
132                         if (propertyNameList.Count == 0)
133                         {
134                             object obj = pi.GetValue(list[i], null);
135                             tempList.Add(obj);
136                         }
137                         else
138                         {
139                             if (propertyNameList.Contains(pi.Name))
140                             {
141                                 object obj = pi.GetValue(list[i], null);
142                                 tempList.Add(obj);
143                             }
144                         }
145                     }
146                     object[] array = tempList.ToArray();
147                     result.LoadDataRow(array, true);
148                 }
149             }
150             return result;
151         }
152
153     }

时间: 2024-08-05 21:07:06

C# Table转换List 或List转换Table的相关文章

《BI那点儿事》数据流转换——OLE DB 命令转换

原文:<BI那点儿事>数据流转换--OLE DB 命令转换 OLE DB命令对数据流中的数据行执行一个OLE DB命令.它针对数据表中的每一行进行更新操作,可以事先将要更新的数据存放在表中.或者针对一个有输入参数的存储过程,可以将这些参数存放在一个数据表中,不用每次都输入参数.示例数据准备: CREATE TABLE SourceParametersForStoredProc ( Param1 INT, param2 INT ) CREATE TABLE DestinationOLEDBCom

thinkphp中SQLSTATE[42S02]: Base table or view not found: 1146 Table错误解决方法

随手记录下今天在thinkphp3.2.3中遇到的错误SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.file_info' doesn't exist,之前用pdo连接数据库一直没有问题,今天突然发现报了上述错误,查看了别人的解决方法,都没有解决,后来看了下之前的表名都是小写的,我现在的表名是"file_Info",改为"file_info"后就不报异常了

图片在线转换,大小在线转换

一.图片在线转换,大小在线转换 http://images.my-addr.com/resize_png_online_tool-free_png_resizer_for_web.php 二.图片在线转ico http://www.img2ico.net/ 疯吻IT

table与tr td样式重叠 table样式边框变细

<table style="border:1px solid red;border-collapse:collapse;"> border-style 的属性 值 描述 none 定义无边框. hidden 与 "none" 相同.不过应用于表时除外,对于表,hidden 用于解决边框冲突. dotted 定义点状边框.在大多数浏览器中呈现为实线. dashed 定义虚线.在大多数浏览器中呈现为实线. solid 定义实线. double 定义双线.双线

职场老手教你pdf转换成jpg在线转换

完成pdf转换jpg有很多种方法,在线转换就是其中一种,很多的在线pdf转换成jpg有令用户很是无奈,转换文件的大小有限制,转换多个文件也不行,转换的形式也过于单一.遇到这些问题的小伙伴们,那是你们没有发现职场老手们都在用迅捷在线pdf转换器,这里在线pdf转换成jpg转换器可以完全满足你的大胃口. 职场老手告诉你下载转换软件前先使用在线转换方法:我们随便下载一款转换工具,如果它很好用,就可以顺利将pdf转换成jpg文件,但是如果我们下载的转换工具是需要购买后才能转换的要怎么办呢?如果转换工具的

动画,2D转换,,3D转换怎样运用

动画 @keyframes 规则用于创建动画.在 @keyframes 中规定某项 CSS 样式, 就能创建由当前样式逐渐改为新样式的动画效果. 属性{[email protected] 2animation } 如:@keyframes myfirst { from {background: red;} to {background: yellow;} } @-moz-keyframes myfirst /* Firefox */ { from {background: red;} to {b

rwkj 1295 选择结构7(成绩转换)------nyist 98 成绩转换

1295 C语言:选择结构7(成绩转换)时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:901 测试通过:593 描述 给出一百分制成绩,要求输出成绩等级‘A’.‘B’.‘C’.‘D’.‘E’. 90分以上为A, 80-89分为B, 70-79分为C, 60-69分为D, 60分以下为E . 将下面的程序填写完整. #include <stdio.h>int main(){ int x; while(scanf("%d",&

Java 把long 转换成 日期 再转换成String类型

1 /** 2 * 把long 转换成 日期 再转换成String类型 3 */ 4 public String transferLongToDate(String dateFormat, Long millSec) { 5 SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); 6 Date date = new Date(millSec); 7 return sdf.format(date); 8 } 上面是方法   第一个参数:da

Css3之高级-5 Css转换(简介、2D转换、3D转换)

一.转换简介 转换概述 - 转换是使元素改变形状.尺寸和位置的一种效果 - 又称为变形,即,可以向元素应用2D 或 3D 转换,从而对元素进行旋转.缩放.移动或倾斜 - 2D 转换: 使元素在 X轴 和 Y轴 平面上发生变化,改变其形状.尺寸和位置 - 3D 转换:元素还可以在 Z 轴上发生变化 转换属性 - transform 属性向元素应用 2D 或者 3D 转换 - 指定一组转换函数,取值 - transform: none/transform-function; - none - 默认值

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳、operator new 和 operator delete 实现一个简单内存泄漏跟踪器

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳.operator new 和 operator delete 实现一个简单内存泄漏跟踪器 一.转换构造函数 可以用单个实参来调用的构造函数定义从形参类型到该类型的一个隐式转换.如下: class Integral { public: Integral (int = 0); //转换构造函数 private: int real; }; Integral A = 1; //调用转换构造函数将1转换为In