首页 > 其他分享 >使用泛型和反射实现:DataTable转List<Model>,以及将DATaRow转Model

使用泛型和反射实现:DataTable转List<Model>,以及将DATaRow转Model

时间:2022-12-14 11:36:54浏览次数:46  
标签:List dc pInfo DATaRow 泛型 Model null DataTable

使用泛型和反射实现:DataTable转List<Model>,以及将DATaRow转Model

代码如下:

 

    public class Helper
    {
        /// <summary>
        /// 将DataTable中的数据封装到List<Model>集合中。
        /// </summary>
        /// <typeparam name="T">实体类型Model</typeparam>
        /// <param name="dt">需要转换的DataTable数据表</param>
        /// <returns>返回List<Model></returns>
        /// <exception cref="Exception"></exception>
        public static List<T> ToList<T>(DataTable dt)
        {
            try
            {
                List<T> list = new List<T>();
                Type type = typeof(T);
                List<PropertyInfo> plist = new List<PropertyInfo>(type.GetProperties());
                if (dt != null)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        //T t = (T)Activator.CreateInstance(type);
                        T t = Activator.CreateInstance<T>();
                        foreach (DataColumn dc in dt.Columns)
                        {
                            PropertyInfo pInfo = plist.Find(p => p.Name == dc.ColumnName);
                            if (pInfo != null)
                            {
                                if (!Convert.IsDBNull(row[pInfo.Name]))
                                {
                                    //pInfo.SetValue(t, row[colm.ColumnName], null);
                                    pInfo.SetValue(t, row[pInfo.Name], null);
                                }
                            }
                        }
                        list.Add(t);
                    }
                }
                return list;
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// 将DataRow数据行转换为Model实体
        /// </summary>
        /// <typeparam name="T">Model实体的类型</typeparam>
        /// <param name="dr">需要转换的DataRow数据行</param>
        /// <returns>返回Model实体</returns>
        /// <exception cref="Exception"></exception>
        public static T ToModel<T>(DataRow dr)
        {
            try
            {
                Type type = typeof(T);//获得类型
                T model = (T)Activator.CreateInstance(type);//获得实体类
                List<PropertyInfo> plist = type.GetProperties().ToList();
                foreach (DataColumn dc in dr.Table.Columns)
                {
                    PropertyInfo pinfo = plist.Find(p => p.Name == dc.ColumnName);
                    if (pinfo != null)
                    {
                        if (!Convert.IsDBNull(dr[dc.ColumnName]))
                        {
                            pinfo.SetValue(model, dr[dc.ColumnName], null);
                        }
                    }
                }
                return model;
            }
            catch (Exception ex)
            {

                throw new Exception(ex.ToString());
            }
        }
    }

 

标签:List,dc,pInfo,DATaRow,泛型,Model,null,DataTable
From: https://www.cnblogs.com/hanzq/p/16981607.html

相关文章

  • 报错:fastclick.js?fe3c:446 [Intervention] Unable to preventDefault inside passive
    报错:fastclick.js?fe3c:446[Intervention]UnabletopreventDefaultinsidepassiveeventlistenerduetotargetbeingtreatedaspassive.Seehttps://www.chromes......
  • Java中ArrayList同步的2种方法分享
    Java中ArrayList同步的2种方法分享​​arrayList​​ 的实现是默认不同步的。这意味着如果一个线程在结构上修改它并且多个线程同时访问它,它必须在外部同步。结构修改意味......
  • Listener监听器
    1.概念及分类listener现在的运用并不多,主要用到的是application中的ServletContextListener  2.使用方法:在初始化方法中加载资源在销毁方法中释放资......
  • 链表与list
    1.链表实现特点:每一个节点都是在堆内存上独立new出来的,节点内存不连续。即逻辑地址连续,而物理地址不连续。优点:内存利用率高,不需要大块连续内存插入和删除节点......
  • 9 泛型
    HeadFirstJava和AcWingJava课程做的总结9。9.1引入Java集合框架(CollectionFramework)能够支持绝大多数会用到的数据结构。比如ArrayList<String>,现在要对其排序,但......
  • golang的net包net.Dial和net.Listen
    在Go中,网络编程主要通过net包实现。支持包括TCP/IP、UDP、域名解析和Unix域socket等连接,此外,还通过net/http,net/rpc等提供了HTTP,RPC等主流应用层的连接协议。TCP服......
  • TypeScript:带属性关联的泛型对象解构问题研究
    TypeScript:带属性关联的泛型对象解构问题研究2020-08-24 1236简介: ##背景###利用泛型进行属性关联大家在业务中一定很熟悉这样的场景,针对某个action,传递一个指定......
  • Java类和对象2-API,String,ArrayList
    Java类和对象2-API,String,ArrayList如何使用帮助文档(API)先看这个类在哪个包里.看这个类的描述信息,知道这个类是干啥的.看构造方法.最后看成员方法,就是返回值,......
  • bug?VS2010中CImageList::DrawIndirect总是返回失败
    //VS2010#if_MSC_VER>=1600pImageList->Draw(pDC,nImage,point,ILD_NORMAL);#elseSIZEsize;size.cx=rect.Width()<sizeImage.cx?rect......
  • A custom list view control with custom scrollbar control, using WTL
    Acustomlistviewcontrolwithcustomscrollbarcontrol,usingWTL Downloaddemoproject-197KbDownloadsource-200KbIntroductionThis......