欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#的datatable转list示例

程序员文章站 2024-02-23 09:43:10
复制代码 代码如下:using system;using system.collections.generic;using system.data;using system...

复制代码 代码如下:

using system;
using system.collections.generic;
using system.data;
using system.reflection;

namespace jdrz.humanidentify
{
    public class helper
    {
        /// <summary>
        /// datatable 转换为list 集合
        /// </summary>
        /// <typeparam name="tresult">类型</typeparam>
        /// <param name="dt">datatable</param>
        /// <returns></returns>
        public static list<tresult> tolist<tresult>(datatable dt) where tresult : class, new()
        {
            //创建一个属性的列表
            var prlist = new list<propertyinfo>();
            //获取tresult的类型实例  反射的入口
            var t = typeof(tresult);
            //获得tresult 的所有的public 属性 并找出tresult属性和datatable的列名称相同的属性(propertyinfo) 并加入到属性列表
            array.foreach(t.getproperties(), p => { if (dt.columns.indexof(p.name) != -1) prlist.add(p); });
            //创建返回的集合
            var oblist = new list<tresult>();

            foreach (datarow row in dt.rows)
            {
                //创建tresult的实例
                var ob = new tresult();
                //找到对应的数据  并赋值
                prlist.foreach(p => { if (row[p.name] != dbnull.value) p.setvalue(ob, row[p.name], null); });
                //放入到返回的集合中.
                oblist.add(ob);
            }
            return oblist;
        }
    }
}