Exemple #1
0
        public static TResult ToModel <TResult>(this DataRow row) where TResult : class, new()
        {
            if (row == null)
            {
                return(null);
            }

            DataTable dt = row.Table;
            //创建一个属性的列表
            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>();

            //创建TResult的实例
            TResult ob = new TResult();

            //找到对应的数据  并赋值
            prlist.ForEach(p =>
            {
                if (row[p.Name] != DBNull.Value)
                {
                    Type dataType = row[p.Name].GetType();
                    switch (dataType.Name)
                    {
                    case "MySqlDateTime":
                        p.SetValue(ob, TryConvertUtil.ToDateTime(row[p.Name]), null);
                        break;

                    default:
                        p.SetValue(ob, row[p.Name], null);
                        break;
                    }
                }
            });

            //放入到返回的集合中.
            return(ob);
        }
Exemple #2
0
        public static List <TResult> ToList <TResult>(this DataTable dt) where TResult : class, new()
        {
            if (dt == null)
            {
                return(null);
            }

            //创建一个属性的列表
            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 dataType = row[p.Name].GetType();
                        switch (dataType.Name)
                        {
                        case "MySqlDateTime":
                            p.SetValue(ob, TryConvertUtil.ToDateTime(row[p.Name]), null);
                            break;

                        case "Int64":
                        case "Int32":
                            {
                                if (p.PropertyType == typeof(bool))
                                {
                                    p.SetValue(ob, TryConvertUtil.ToInt(row[p.Name]) == 1, null);
                                }
                                else
                                {
                                    p.SetValue(ob, TryConvertUtil.ToInt(row[p.Name]), null);
                                }
                                break;
                            }

                        default:
                            p.SetValue(ob, row[p.Name], null);
                            break;
                        }
                    }
                });
                //放入到返回的集合中.
                oblist.Add(ob);
            }
            return(oblist);
        }