ListHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
namespace Data_Helper
{
/// <summary>
/// List 操作(dataTable、dataSet 等之间的转换)
/// </summary>
public class ListHelper
{
/// <summary>
/// 将 dataTable 转换成 List
/// </summary>
/// <typeparam name="T">要转换成的对象</typeparam>
/// <param name="dataTable">要转换的DataTable</param>
/// <returns></returns>
public static List<T> ConvertToList<T>(DataTable dataTable)
{
T obj = default(T);
List<T> objList = new List<T>();
PropertyInfo[] objProperties = null;
string propertieName = null;
try
{
foreach (DataRow row in dataTable.Rows)
{
obj = Activator.CreateInstance<T>();//动态创建类型实例,不需要引用类库
objProperties = obj.GetType().GetProperties();
foreach (PropertyInfo properties in objProperties)
{
if (properties != null)
propertieName = properties.Name;
if (propertieName != null && dataTable.Columns.Contains(propertieName))
{
object value = row[propertieName];
if (value.GetType() == typeof(System.DBNull))
value = null;
properties.SetValue(obj, value, null);
}
}
objList.Add(obj);
}
}
catch (Exception ex)
{
throw ex;
}
return objList;
}
/// <summary>
/// 将 List 转换成 dataTable
/// </summary>
/// <typeparam name="T">要转换成的对象</typeparam>
/// <param name="objList">要转换的List</param>
/// <returns></returns>
public static DataTable ConvertToDataTable<T>(List<T> objList)
{
if (objList == null || objList.Count <= 0)
return null;
DataTable dt = new DataTable(typeof(T).Name);
PropertyInfo[] objProperties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
try
{
DataColumn column;
DataRow row;
PropertyInfo property;
string propertyName = null;
foreach (T obj in objList)
{
if (obj == null)
continue;
row = dt.NewRow();
for (int i = 0, j = objProperties.Length; i < j; i++)
{
property = objProperties[i];
propertyName = property.Name;
if (propertyName != null && dt.Columns[propertyName] == null)
{
column = new DataColumn(propertyName, property.PropertyType);
dt.Columns.Add(column);
}
row[propertyName] = property.GetValue(obj, null);
}
dt.Rows.Add(row);
}
}
catch (Exception ex)
{
throw ex;
}
return dt;
}
/// <summary>
/// 将 List 转换成 dataSet
/// </summary>
/// <typeparam name="T">要转换成的对象</typeparam>
/// <param name="objList">要转换的objList</param>
/// <returns></returns>
public static DataSet ConvertToDataSet<T>(List<T> objList)
{
if (objList == null || objList.Count <= 0)
return null;
DataSet ds = new DataSet();
try
{
DataTable dt = ConvertToDataTable(objList);
ds.Tables.Add(dt);
}
catch (Exception ex)
{
throw ex;
}
return ds;
}
}
}
ListHelper的更多相关文章
- 剑指Offer面试题:15.反转链表
一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...
- JAVA 多线程编程之一(基础)
1.原子变量(java.util.concurrent.atomic) 原子状态,变化不会被打断,如 AtomicLong , AtomicInteger 2.内部锁 synchronized 块 ...
- 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现
引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之 ...
- Java并发编程笔记—基础知识—实用案例
如何正确停止一个线程 1)共享变量的使用 中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务.线程必须周期性的核查这一变量(尤其在 ...
- A Star算法笔记
回顾A*算法,偶得一源代码,略有瑕疵,改正之,并置于下. using System; using System.Collections.Generic; using System.Linq; usin ...
- ASP.NET SignalR2持久连接层解析
越是到年底越是感觉浑身无力,看着啥也不想动,只期盼着年终奖的到来以此来给自己打一针强心剂.估摸着大多数人都跟我一样犯着这样浑身无力的病,感觉今年算是没挣到啥钱,但是话也不能这么说,搞得好像去年挣到钱了 ...
- Java 并发编程(三)为线程安全类中加入新的原子操作
Java 类库中包括很多实用的"基础模块"类.通常,我们应该优先选择重用这些现有的类而不是创建新的类.:重用能减少开发工作量.开发风险(由于现有类都已经通过測试)以及维护成本.有时 ...
- C# List 扩展排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Comm ...
- Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)
一.发布与溢出 "发布(Publish)"一个对象的意思是指,使对象能够在当前作用于之外的代码中使用.这个"之外",尤为关键,各种出问题的地方,都是因为这个&q ...
随机推荐
- 重写OnPaint事件对窗体重绘 实例1
public class WindowOne:Form { public WindowOne() { InitializeCompnent(); } public void InitializeCom ...
- How to resolve the SQL error “cannot connect to WMI provider”
当你试图打开SQL Server Configuation Manager时发现如下错误: “cannot connect to WMI provider. You do not have permi ...
- CUICatalog: Invalid asset name supplied:
[UIImage imageNamed:name];但是这个name却是空的,所以就报了这个错了. 解决方法,在项目中搜索UIImage imageNamed:,然后打印看看所谓的name是否为空.找 ...
- g++实用技巧
查看代码文件包含了哪些头文件 g++ -M FileName
- Render和template?
Template是一个模板. render = web.template.render('templates/') 这会告诉web.py到你的模板目录中去查找模板.然后把 index.GET改成: 告 ...
- C语言中对于结构的定义一般放在.h中还是.c中
单文件使用的结构体放.c文件中 本模块内部使用结构体,放模块内部头文件中 供外部使用的结构体,放模块对外头文件中.
- linux for循环
一定要记得写后面的分号:http://www.runoob.com/linux/linux-shell-variable.html 这个页面的课程的循环教程是有问题的 for color in yel ...
- 【JAVA编码专题】总结
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
- s3c2416裸跑环境配置
最近刚刚开始学习ARM-linux,上周买了块tq2416的板子,给的Linux资料太复杂太深奥不愿看,等不及想要把2416跑起来.于是到处找相关裸跑资料,可是用2416的人实在少,网上的资料更少,裸 ...
- .Net XML操作 <第二篇>
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...