public static void EntityListByEmit(System.Data.IDataReader DataReader, DbExecuteReadOnebyOneAction <T> callback)
        {
            Dictionary <string, string> FieldDic = new Dictionary <string, string>();
            int i = 0;

            while (i < DataReader.FieldCount)
            {
                string Name = DataReader.GetName(i);
                if (!FieldDic.ContainsKey(Name.ToLower()))
                {
                    FieldDic.Add(Name.ToLower(), Name);
                }
                i++;
            }

            EntityPropertyEmitSetter[] ps = EntityPropertyEmitSetter.GetProperties(typeof(T));
            long rowNum = 0;

            while (DataReader.Read())
            {
                T   obj = new T();
                int num = 0;
                while (num < ps.Length)
                {
                    string fieldName = ps[num].Info.Name;
                    string name      = fieldName.ToLower();
                    object val       = DataReader[FieldDic[name]];
                    if (FieldDic.ContainsKey(name) && val != DBNull.Value)
                    {
                        ps[num].Setter(obj, val);
                    }
                    num++;
                }
                rowNum++;
                DbExecuteReadOnebyOneResult <T> result = new DbExecuteReadOnebyOneResult <T>(rowNum, obj);
                try
                {
                    callback(result);
                }
                catch
                {
                    break;
                }
                if (!result.Next)
                {
                    break;
                }
            }
            DataReader.Close();
        }
        /// <summary>
        /// 获取一个类中的所有公开实例属性和它们的Set方法委托
        /// </summary>
        public static EntityPropertyEmitSetter[] GetProperties(Type type)
        {
            EntityPropertyEmitSetter[] arr;
            if (Cache.TryGetValue(type, out arr))
            {
                return(arr);
            }
            PropertyInfo[] ps = type.GetProperties();
            arr = new EntityPropertyEmitSetter[ps.Length];
            Type delegateType = typeof(ZeroEntityPropertyEmitSetter);

            for (int i = 0; i < ps.Length; i++)
            {
                EntityPropertyEmitSetter op = new EntityPropertyEmitSetter();
                op.Info   = ps[i];
                op.Setter = CreateSetter(op.Info, delegateType);
                arr[i]    = op;
            }
            Cache.Add(type, arr);
            return(arr);
        }
        public static List <T> EntityListByEmit(System.Data.IDataReader DataReader)
        {
            Dictionary <string, string> FieldDic = new Dictionary <string, string>();
            int i = 0;

            while (i < DataReader.FieldCount)
            {
                string Name = DataReader.GetName(i);
                if (!FieldDic.ContainsKey(Name.ToLower()))
                {
                    FieldDic.Add(Name.ToLower(), Name);
                }
                i++;
            }

            List <T> Li = new List <T>();

            EntityPropertyEmitSetter[] ps = EntityPropertyEmitSetter.GetProperties(typeof(T));
            while (DataReader.Read())
            {
                T   obj = new T();
                int num = 0;
                while (num < ps.Length)
                {
                    string fieldName = ps[num].Info.Name;
                    string name      = fieldName.ToLower();
                    object val       = DataReader[FieldDic[name]];
                    if (FieldDic.ContainsKey(name) && val != DBNull.Value)
                    {
                        ps[num].Setter(obj, val);
                    }
                    num++;
                }
                Li.Add(obj);
            }
            DataReader.Close();
            return(Li);
        }