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

解二亲测,解一待测!

posted on 2016-05-09 12:06  sddhome  阅读(1091)  评论(1编辑  收藏  举报

导航