首页 / 软件开发 / C# / 扩展方法(1) DataTable和List相互转换
扩展方法(1) DataTable和List相互转换2011-07-27 博客园 陈亮最近自从公司的开发环境改了.从VS2003 改到VS2008 后 用了C# 3.0 的新东西,自己积累的方法就慢 慢的多起来了.由于经常使用以前经常DataTable 现在都使用List<T>就此需要经常转换..用的多了,自然需要 写个简单的方法来实现互相转换由于C#3.0出现了扩展方法 我们可以通过这样一个特性来简化我们的开发.DataTable 转换为List<T> 的我们可以通过扩展DataTable来简化public static class DataTableExtensions
{
/// <summary>
/// DataTable 转换为List 集合
/// </summary>
/// <typeparam name="TResult">类型</typeparam>
/// <param name="dt">DataTable</param>
/// <returns></returns>
public static List<TResult> ToList<TResult>(this DataTable dt) where TResult : class,new()
{
//创建一个属性的列表
List<PropertyInfo> prlist = new List<PropertyInfo> ();
//获取TResult的类型实例 反射的入口
Type t = typeof(TResult);
//获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列 名称相同的属性(PropertyInfo) 并加入到属性列表
Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
//创建返回的集合
List<TResult> oblist = new List<TResult>();
foreach (DataRow row in dt.Rows)
{
//创建TResult的实例
TResult ob = new TResult();
//找到对应的数据 并赋值
prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
//放入到返回的集合中.
oblist.Add(ob);
}
return oblist;
}
}