zoukankan      html  css  js  c++  java
  • DataTable转成List集合

    解一:

    public class ModelConvertHelper<T> where T : new()  // 此处一定要加上new()
        {
    
            public static IList<T> ConvertToModel(DataTable dt)
            {
    
                IList<T> ts = new List<T>();// 定义集合
                Type type = typeof(T); // 获得此模型的类型
                string tempName = "";
                foreach (DataRow dr in dt.Rows)
                {
                    T t = new T(); 
                    PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性
                    foreach (PropertyInfo pi in propertys)
                    {
                        tempName = pi.Name;
                        if (dt.Columns.Contains(tempName))
                        {
                            if (!pi.CanWrite) continue;
                            object value = dr[tempName];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                    ts.Add(t);
                }
                return ts;
            }
        }
    View Code


    解二:

    /// <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()
            {
                //创建一个属性的列表
                List<PropertyInfo> prlist = new List<PropertyInfo>();
                //获取TResult的类型实例  反射的入口
                Type t = typeof(TResult);
                //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 
                Array.ForEach<PropertyInfo>(t.GetProperties(), p =>
                {
                    if (dt.Columns.IndexOf(p.Name) != -1)
                        prlist.Add(p);
                });
                //创建返回的集合
                List<TResult> oblist = new List<TResult>();
    
                foreach (DataRow row in dt.Rows)
                {
                    //创建TResult的实例
                    TResult ob = new TResult();
                    //找到对应的数据  并赋值
                    prlist.ForEach(p =>
                    {
                        if (row[p.Name] != DBNull.Value)
                        {
                            
                            Type tt = row[p.Name].GetType();
                            date = tt.Name;
                        }
    
                        if (date == "DateTime")
                        {
                        //    if (p.Name == "WorkingDate" || p.Name == "CreateDate" || p.Name == "RptDate" || p.Name == "UpdateDate")
                        //    {
                        //        p.SetValue(ob, row[p.Name].ToString(), null);
                        //    }
                        //    else
                        //    {
                                try
                                {
                                    p.SetValue(ob, Convert.ToDateTime(row[p.Name]), null);
                                }
                                catch
                                {
    
                                }
                            //}
                            
                        }
                        else if (date == "Int32")
                        {
                            //if (p.Name == "IsErr" || p.Name == "State" || p.Name == "SourceType")
                            //{
                            //    p.SetValue(ob, row[p.Name].ToString(), null);
                            //}
                            //else
                            //{
                                try
                                {
                                    p.SetValue(ob, Convert.ToInt32(row[p.Name]), null);
                                }
                                catch
                                {
    
                                }
                            //}
    
                        }
                        else if (date == "Decimal")
                        {
                        //    if (p.Name == "IsErr")
                        //    {
                            try
                            {
                                p.SetValue(ob, Convert.ToDecimal(row[p.Name]), null);
                            }
                            catch
                            {
    
                            }
                        //    }
                        //    else
                        //    {
                                //p.SetValue(ob, row[p.Name].ToString(), null);
                            //}
                        }
                        else
                        {
                            try
                            {
                                p.SetValue(ob, row[p.Name], null);
                            }
                            catch
                            {
    
                            }
    
                        }
                    });
                    //放入到返回的集合中.
                    oblist.Add(ob);
                }
                return oblist;
            }
    View Code

    解二亲测,解一待测!

  • 相关阅读:
    (三)java程序的编译和执行
    (二)java环境搭建
    (一)java概述
    (一)mvc与mvvm设计模式
    小程序 开发之向左滑动实现删除功能
    小程序开发之三级联动
    (效果五)js获取客户端ip地址及浏览器信息
    (六)js常见四大排序
    小程序开发之组件的使用
    Nodejs实现爬虫抓取数据
  • 原文地址:https://www.cnblogs.com/sdd53home/p/5473453.html
Copyright © 2011-2022 走看看