DateTableHelper.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. namespace EMIS.Utility
  8. {
  9. public static class DateTableHelper
  10. {
  11. public static List<T> DataTableToList<T>(this DataTable dt) where T : class, new()
  12. {
  13. //创建一个属性的列表
  14. List<PropertyInfo> prlist = new List<PropertyInfo>();
  15. //获取TResult的类型实例 反射的入口
  16. Type t = typeof(T);
  17. //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同且可写的属性(PropertyInfo), 并加入到属性列表
  18. Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1 && p.CanWrite) prlist.Add(p); });
  19. //创建返回的集合
  20. List<T> oblist = new List<T>();
  21. foreach (DataRow row in dt.Rows)
  22. {
  23. //创建TResult的实例
  24. T ob = new T();
  25. //找到对应的数据 并赋值
  26. prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
  27. //放入到返回的集合中.
  28. oblist.Add(ob);
  29. }
  30. return oblist;
  31. }
  32. }
  33. }