/// <summary>
/// 利用反射将Datatable转换为List<T>对象
/// </summary>
/// <typeparam name="T">集合</typeparam>
/// <param name="dt"> datatable对象</param>
/// <returns></returns>
public List<T> DataTableToList<T>(DataTable dt) where T : new()
{
//定义集合
List<T> ts = new List<T>();
//定义一个临时变量
string tempName = string.Empty;
//遍历dataTable中的数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;//将属性名称赋值给临时变量
//检查datatable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
//取值 object value = dr[tempName];
//如果非空,则赋给对象的属性
if (value != DBNull.Value)
{
//这里添加判断的原因:比如double转folat不能隐式转换,而枚举类型又不能使用Convert.ChangeType
if (pi.PropertyType.IsEnum)
{
pi.SetValue(t, value, null);
}
else
{
//ChangeType属于强转可能存在数据丢失,但是pi.PropertyType是对应你类成员的类型
pi.SetValue(t, Convert.ChangeType(value, pi.PropertyType), null);
} }
}
}
//对象添加到泛型集合中
ts.Add(t);
}
return ts; }

  注:请引用反射using

最新文章

  1. java基础知识(三)java关键字
  2. 利用background-attachment做视差滚动效果
  3. vagrant系列教程(四):vagrant搭建redis与redis的监控程序redis-stat(转)
  4. PHP获取当前日期和时间的方法
  5. VS2010界面主题更换全过程
  6. mysql中 的 ENGINE = innodb; 是什么意思?
  7. C#实现MySQL数据库中的blob数据存储
  8. Java安装根目录
  9. hdu 1520Anniversary party(简单树形dp)
  10. 基于Bootstrap的步骤引导html页面
  11. OpenCV成长之路:图像直方图的应用
  12. 2017&#183;iOS学习资料
  13. Nuget安装包
  14. 鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
  15. Leetcode 1020. 将数组分成和相等的三个部分
  16. Jmeter参数跨线程组传递
  17. Course Schedule课程表12(用Topological Sorting)
  18. 【leetcode 简单】 第五十九题 同构字符串
  19. android studio 运行太慢了
  20. Julia - 函数的参数传递

热门文章

  1. eclipse IDE注释模板设置
  2. DOM基础知识整理
  3. office2016_windows永久激活查看方法
  4. html中插入css和js
  5. c++对象导出到lua
  6. Python,PyCharm2017安装教程,包含注册码[转载]
  7. Unusual Sequences
  8. php学习笔记-可变变量
  9. EPEL for CentOS or Redhat
  10. CentOS 6.5 and Ubuntu 14.04 使用外部邮箱发送邮件