【.Net码农】【PropertyInfo】List<T>转换为DataTable
来源:互联网 发布:微信时时彩源码 编辑:程序博客网 时间:2024/04/25 22:25
http://blog.csdn.net/emoonight/article/details/6617683
今天小姚碰到个问题,有个以前的程序直接调用数据库用dataset和datatable.但是现在想加一层Model层.获取List<T>后赋值给Table时碰到难题.
本来我觉得这就是个简单的问题,将Table看做一张表,直接循环List后赋值即可.查了下资料才知道自己把DataTable想得太简单了....
先说后来用到的方法一
List<info> infos = Dal.GetInfos(); DataTable dt = new DataTable(); dt.Columns.Add("cName"); foreach (var info in infos) { DataRow dr = dt.NewRow(); dr["cName"] = info.Name; dt.Add(dr); }
网上的:
public static class DataTableExtensions{ /// <summary> /// 转化一个DataTable /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static DataTable ToDataTable<T>(this IEnumerable<T> list) { //创建属性的集合 List<PropertyInfo> pList = new List<PropertyInfo>(); //获得反射的入口 Type type = typeof(T); DataTable dt = new DataTable(); //把所有的public属性加入到集合 并添加DataTable的列 Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); }); foreach (var item in list) { //创建一个DataRow实例 DataRow row = dt.NewRow(); //给row 赋值 pList.ForEach(p => row[p.Name] = p.GetValue(item, null)); //加入到DataTable dt.Rows.Add(row); } return dt; } /// <summary> /// DataTable 转换为List 集合 /// </summary> /// <typeparam name="TResult">类型</typeparam> /// <param name="dt">DataTable</param> /// <returns></returns> public static List<T> ToList<T>(this DataTable dt) where T : class, new() { //创建一个属性的列表 List<PropertyInfo> prlist = new List<PropertyInfo>(); //获取TResult的类型实例 反射的入口 Type t = typeof(T); //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); }); //创建返回的集合 List<T> oblist = new List<T>(); foreach (DataRow row in dt.Rows) { //创建TResult的实例 T ob = new T(); //找到对应的数据 并赋值 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); }); //放入到返回的集合中. oblist.Add(ob); } return oblist; } /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list">集合</param> /// <returns></returns> public static DataTable ToDataTableTow(IList list) { DataTable result = new DataTable(); if (list.Count > 0) { PropertyInfo[] propertys = list[0].GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { result.Columns.Add(pi.Name, pi.PropertyType); } for (int i = 0; i < list.Count; i++) { ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys) { object obj = pi.GetValue(list[i], null); tempList.Add(obj); } object[] array = tempList.ToArray(); result.LoadDataRow(array, true); } } return result; } /**/ /// <summary> /// 将泛型集合类转换成DataTable /// </summary> /// <typeparam name="T">集合项类型</typeparam> /// <param name="list">集合</param> /// <returns>数据集(表)</returns> public static DataTable ToDataTable<T>(IList<T> list) { return ToDataTable<T>(list, null); } /**/ /// <summary> /// 将泛型集合类转换成DataTable /// </summary> /// <typeparam name="T">集合项类型</typeparam> /// <param name="list">集合</param> /// <param name="propertyName">需要返回的列的列名</param> /// <returns>数据集(表)</returns> public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName) { List<string> propertyNameList = new List<string>(); if (propertyName != null) propertyNameList.AddRange(propertyName); DataTable result = new DataTable(); if (list.Count > 0) { PropertyInfo[] propertys = list[0].GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { if (propertyNameList.Count == 0) { result.Columns.Add(pi.Name, pi.PropertyType); } else { if (propertyNameList.Contains(pi.Name)) result.Columns.Add(pi.Name, pi.PropertyType); } } for (int i = 0; i < list.Count; i++) { ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys) { if (propertyNameList.Count == 0) { object obj = pi.GetValue(list[i], null); tempList.Add(obj); } else { if (propertyNameList.Contains(pi.Name)) { object obj = pi.GetValue(list[i], null); tempList.Add(obj); } } } object[] array = tempList.ToArray(); result.LoadDataRow(array, true); } } return result; }}
0 0
- 【.Net码农】【PropertyInfo】List<T>转换为DataTable
- List<T>转换为DataTable
- List<T>转换为DataTable
- List<T>转换为DataTable
- List<T>转换为DataTable
- List<T>转换为DataTable
- List<T>转换为DataTable
- .net DataTable 转换为 List
- 【.Net码农】【PropertyInfo】C# list导出Excel
- datatable转换为list
- DataTable转换为List
- DataTable转换为List
- DataTable 转换为 List
- datatable转换为list
- DataTable 转换为 List ?
- asp.net中DataTable和List<T>之间相互转换
- DataTable转换成List<T>
- DataTable转换成List<T>
- 初探UUID
- 黑马程序员 - OC语言 - NSlog函数的使用方法
- Java提高篇(三三)-----Map总结
- 开关电源与线性电源的区别
- Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)
- 【.Net码农】【PropertyInfo】List<T>转换为DataTable
- QT窗口置顶
- 小米游戏中心sdk接入unity
- using 命名空间指令和cookie保存实体类的一些问题
- Eclipse最有用的快捷键
- 学期总结
- SpannableString 记录
- 企业网站制作的决定因素
- 第13周项目5-拓扑排序算法的验证