反射技术实现DataTable到实体类的赋值操作

原创 2016年06月01日 21:45:44

反射技术实现DataTable到实体类的赋值操作

反射方法

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;


namespace WindowsFormsApplication1
{
  //  class GenericList
    public class GetEntityList<T>:List<T>
    {
        /// <summary>
        /// 获得实体集合
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="f">类名称</param>
        public GetEntityList(DataTable dt, string f)
        {
            //第一步:创建对象实例||||||||Activator.CreateInstance
            System.Type obType= System.Type.GetType(f);//获取指定名称的类型
            object Instance = Activator.CreateInstance(obType, null);//创建指定类型实例
            //第二步:获取指定对象的所有公共属性 ||||对象.GetType().GetProperties();
            PropertyInfo[] fields = Instance.GetType().GetProperties();
            //第三步:在DataTable中遍历所有行,将值赋值给相应的属性
            foreach (DataRow dr in dt.Rows)
            {
                object obj = Activator.CreateInstance(obType, null);
                foreach (DataColumn dc in dt.Columns)
                {
                    foreach (PropertyInfo t in fields)
                    {
                        //根据条件DataColumn列名称与属性名称相等
                        if (dc.ColumnName == t.Name)
                        {
                            //属性类将值复制个相应的属性即可
                            t.SetValue(obj, dr[dc.ColumnName], null);//给对象赋值
                            continue;
                        }
                    }
                }
                this.Add((T)obj);//将对象填充到list集合
            }
        }
    }
}

实体类 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace WindowsFormsApplication1
{
    //[MetadataType(typeof(EmployeeData))]
    public  class People
    {
            public int ID { set; get;}
            public string Uname { set; get;}
            public bool Sex { set; get;}


    }
}

测试调用:

DataTable dt = new DataTable("People");


            DataColumn dc1 = new DataColumn("ID", Type.GetType("System.Int32"));
            DataColumn dc2 = new DataColumn("Uname", Type.GetType("System.String"));
            DataColumn dc3 = new DataColumn("Sex", Type.GetType("System.Boolean"));
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);


            DataRow dr = dt.NewRow();
            dr["ID"] = "1233456";
            dr["Uname"] = "WL";
            dr["Sex"] = 1;
            dt.Rows.Add(dr.ItemArray);
            DataRow dr1 = dt.NewRow();
            dr1["ID"] = "1233456";
            dr1["Uname"] = "WL";
            dr1["Sex"] = 1;
            dt.Rows.Add(dr1.ItemArray);


            GetEntityList<People> list1 = new GetEntityList<People>(dt, "WindowsFormsApplication1.People");//调用
版权声明:

C#使用反射将DataTable转换List<T>

直接上干货/// /// DataTable转换为List /// public static class ToList { public stat...
  • u010085423
  • u010085423
  • 2016年12月04日 01:13
  • 611

DataTable与实体类互相转换

DataTable与实体类互相转换
  • littlewrong
  • littlewrong
  • 2015年08月07日 11:46
  • 1184

c# 反射得到实体类的字段名称和值,DataTable转List<T>

/// /// 反射得到实体类的字段名称和值 /// var dict = GetProperties(model); /// /// 实体类 /// 实例化 /// public static...
  • smartsmile2012
  • smartsmile2012
  • 2016年11月18日 15:54
  • 4348

自用的基于Emit的C#下DataTable转实体类方法

自用的基于Emit的C#下DataTable转实体类方法之前一直在做WebForm的开发,数据绑定时直接DataTable绑定Gridview很方便,但是最近开始往MVC转,数据列表的传递和页面展示基...
  • vfeihuang
  • vfeihuang
  • 2017年01月05日 19:11
  • 878

Datatable和实体还有实体集List的区别与转化

实体,实体集,Datatable三者的比较,用好了,灵活性一定会得到很大的提高
  • lovemenghaibin
  • lovemenghaibin
  • 2014年08月16日 11:41
  • 1792

java反射给实体类赋值

给实体类赋值有两种方法,一个是通过Field.set()方法,另一个是Method.invoke(); 至于两种方法的区别,还想请教: 我知道的:set直接给属性赋值,invoke通过调用属性的s...
  • chaoyue1397
  • chaoyue1397
  • 2016年03月10日 15:30
  • 998

实体类与DataTable的转化(适用任意类型)

/// /// DataTable与实体类互相转换 /// /// 实体类 public class ModelHandler where T : new() ...
  • Shiyaru1314
  • Shiyaru1314
  • 2015年09月06日 18:12
  • 467

java反射对实体类取值和赋值

项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个磨砺营的java反射讲解,非常受益。于是,哈哈哈 public static void mod...
  • huqingpeng321
  • huqingpeng321
  • 2016年12月15日 09:00
  • 921

C#中对datatable的操作

 一、创建DataTable   //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空表 DataTable dt =...
  • whaxrl
  • whaxrl
  • 2016年02月22日 15:49
  • 3925

C#.net开发 List与DataTable相互转换

在.NET开发中,操作关系型数据库提取数据经常用到DataTable。ASP.NET前后台数据绑定应用DataTable的时候似乎也很多,但是List集合比DataTable应用更加广泛,提取处理数据...
  • shuizhaoshui
  • shuizhaoshui
  • 2016年05月16日 15:29
  • 9294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:反射技术实现DataTable到实体类的赋值操作
举报原因:
原因补充:

(最多只允许输入30个字)