public static IEnumerable<T> ConvertObject<T>(DataTable dt) where T : new()
{ var v = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
List<PropertyInfo> Fields = new List<PropertyInfo>();
foreach (var s in v)
{
if (dt.Columns.Contains(s.Name))
Fields.Add(s);
} foreach (DataRow dr in dt.Rows)
{
T t = new T();
foreach (var s in Fields)
{
if (object.Equals(dr[s.Name], DBNull.Value)) continue;
s.SetValue(t, dr[s.Name], null);
}
yield return t;
}
} public static T ConvertObject<T>(DataRow dr) where T : new()
{ var v = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); T t = new T();
foreach (var s in v)
{
if (dr.Table.Columns.Contains(s.Name))
{
s.SetValue(t, dr[s.Name], null);
} } return t; }

Bug,

1.如果泛型对象(T)属性的类型和DataTable列的类型不一致,抛异常  ---懒得解决

2.DBNull.value转换失败,新方法

  public static T ConvertObject<T>(DataRow dr) where T : new()
{ var v = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); T t = new T();
foreach (var s in v)
{
if (dr.Table.Columns.Contains(s.Name))
{
if (object.Equals(dr[s.Name], DBNull.Value)) continue;
{
s.SetValue(t, dr[s.Name]);
}
} } return t; }

DataTable或者DataRow转换对象的更多相关文章

  1. 【转】给DataTable和DataRow扩展方法,直接转换为对象集合或对象

    /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为对象集合或对象 /// 补充说明:此扩展类可以极大的简化操作,但是性能低下,大数据以 ...

  2. DataTable和DataRow利用反射直接转换为Model对象的扩展方法类

    DataTable和DataRow利用反射直接转换为Model对象的扩展方法类   /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为 ...

  3. 菜鸟类库诞生记二:通过反射转换DataRow为对象

    虽然大数据量的环境下,通过反射转换DataRow为对象性能会很低,但是在数据量适中的时候,这样能够减少很多的代码量,性能也确实不错. 所以在数据量不是很大的情况下,推荐使用. 如果数据量很大,可以使用 ...

  4. c# datarow[] 转换成 datatable, List<T> 转datatable

      c# datarow[] 转换成 datatable, List<T> 转datatable DdataRow[]转成Datatable private DataTable ToDat ...

  5. C# DataRow[]转换DataTable

    DataTable dt = ... DataRow[] dr = dt.Select("ID=14"); dt = dr.CopyToDataTable();

  6. 关于datatable linq的转换

    关于datatable datarow DataTable paraval = GetParaVal(DateCondition, strUrl, Page, RowPage, iYearMonthN ...

  7. DataTable转换为Model实体对象

    记得在学校的时候,接触得最多的就是SqlHelper,每次在读取的时候不管是DataTable还是DataReader转换为实体对象的时候是最恼火的,因为要写很多代码,而且没有什么意义.后面接触到了反 ...

  8. C#DataTable DataSet DataRow区别详解

    DataSet 是C#中用来存储数据库数据的.其实,它的作用是在内存中模拟数据库.我们现实生活中的数据库从大到小的基本结构类似于:数据库实例,表,列,行.在C#语言中,我们在内存中也模拟出了一个这样的 ...

  9. DataSet、DataTable、DataRow 复制

    DataSet.DataTable.DataRow 复制 DataSet 对象是支持 ADO.NET的断开式.分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个Da ...

随机推荐

  1. 在centos中编译putty时提示找不到gtk库的解决办法

    明明已经安过gtk了, 后来在csdn上发现了前人的解决办法 yum install libgnomeui-devel 现在编译出来的putty就可以有图形界面了

  2. Mysql 经典

  3. 高效的使用Response.Redirect解决一些不必要的问题(转载)

    这篇文章主要介绍了如何高效的使用 Response.Redirect解决一些不必要的问题,需要的朋友可以参考下 介绍: 我正在评估一个 ASP.NET Web 项目应用.它有一些可扩展性问题.意味着当 ...

  4. javascript 正则表达式(二)

    /* 正则表达式方法:test(),exec(),String对象方法:match(),search(),replace(),split() 1.test()方法: 用法:  regexp对象实例.t ...

  5. input放在a标签里面不能选择input里面的文本,IE9点击失效

    input放在a标签里面不能选择input里面的文本,IE9点击失效 在IE浏览器中<input type="text" value="test" /&g ...

  6. Java生产者和消费者问题

    容器类Box.java public class Box { private int num = 0; public void put(){ if(num==10){ try { System.out ...

  7. html 关于块级元素和行内元素

    常用的行内元素要记住:a.span.img.input.lable.select.strong.textarea 常用的块级元素要记住:div.h1~h6.dl.ul.ol 例如在一个title中,有 ...

  8. lz: linux ls 变种 只显示大小和名称(包括目录)

    本次输入法使用: 手心输入法 for Mac 1.0版 测试环境为:Ubuntu 14.14.2 LTS updates 测试时间为:2015年5月28日,感觉死亡将至的夜晚,独自一人坐在一个角落,戴 ...

  9. Linux下通过crontab及expect实现自动化处理 --亲测可用

    #!/usr/bin/expect -fspawn /home/scripts/bckup.shexpect "Enter password: "  send "WWQQ ...

  10. Hibernate,get()和load()区别

    最主要区别在于,检索策略不同. 无论get和load,首先都会去session缓存中看有没有现成的数据.没有的话,get会采用立即检索策略.即:将对象从数据库检索出来并返回,不使用代理类.load的话 ...