Example #1
0
        public override async Task <IEnumerable <T> > GetPagerListAsync <T>(string condition, string sort, int pageIndex, int pageSize, string filter = "*", DbParameter[] conditionParameters = null)
        {
            var    lstResult = new List <T>();
            T      tItem     = default(T);
            string tableName = AttrAssistant.GetTableName(typeof(T)); //表名

            if (condition.IsNullOrEmpty())
            {
                condition = "1=1";
            }

            //起始记录
            int startPosition = (pageIndex - 1) * pageSize; //比如第一页是从0开始,而不是1,和sqlserver不同

            var builder = new StringBuilder();

            //limit 起始行(包括),记录数
            builder.AppendFormat(@"select {0} from {1} as {6} {2} {3} limit {4},{5}",
                                 filter, tableName,
                                 condition.IsNullOrEmpty() ? "" : " where " + condition,
                                 sort.IsNullOrEmpty() ? "" : " order by " + sort, startPosition, pageSize, Utils.SinGooPagerAlias);

            var reader = await GetDataReaderAsync(builder.ToString(), conditionParameters);

            var refBuilder = ReflectionBuilder <T> .CreateBuilder(reader);

            while (reader.Read())
            {
                tItem = refBuilder.Build(reader, dbProviderType);
                lstResult.Add(tItem);
            }

            reader.Close();
            return(lstResult);
        }
Example #2
0
        public override IEnumerable <T> GetPagerList <T>(string condition, string sort, int pageIndex, int pageSize, string filter = "*", DbParameter[] conditionParameters = null)
        {
            var    lstResult = new List <T>();
            T      tItem     = default(T);
            string tableName = AttrAssistant.GetTableName(typeof(T)); //表名

            if (string.IsNullOrEmpty(condition))
            {
                condition = "1=1";
            }

            //起始记录(不包括)
            int startPosition = (pageIndex - 1) * pageSize;

            StringBuilder builder = new StringBuilder();

            //offset代表从第几条记录“之后“开始查询,limit表明查询多少条结果
            builder.AppendFormat(@"select {0} from {1} as {6} {2} {3} limit {4} offset {5}",
                                 filter, tableName,
                                 condition.IsNullOrEmpty() ? "" : " where " + condition,
                                 sort.IsNullOrEmpty() ? "" : " order by " + sort, pageSize, startPosition, Utils.SinGooPagerAlias);

            var reader     = GetDataReader(builder.ToString(), conditionParameters);
            var refBuilder = ReflectionBuilder <T> .CreateBuilder(reader);

            while (reader.Read())
            {
                tItem = refBuilder.Build(reader, dbProviderType);
                lstResult.Add(tItem);
            }

            reader.Close();
            return(lstResult);
        }
        public override async Task <IEnumerable <T> > GetPagerListAsync <T>(string condition, string sort, int pageIndex, int pageSize, string filter = "*", DbParameter[] conditionParameters = null)
        {
            if (sort.IsNullOrEmpty())
            {
                throw new ArgumentNullException("sort"); //sort参数必填
            }
            var    lstResult = new List <T>();
            T      tItem     = default(T);
            string tableName = AttrAssistant.GetTableName(typeof(T)); //表名

            if (condition.IsNullOrEmpty())
            {
                condition = "1=1";
            }

            //起始记录
            int startPosition  = (pageIndex - 1) * pageSize + 1;
            int offsetPosition = (pageIndex - 1) * pageSize;
            //截止记录
            int endPosition = pageIndex * pageSize;

            var builder = new StringBuilder();

            if (dbVersionNo >= 11)
            {
                //sqlserver2012及以上可用
                builder.AppendFormat(@"select {0}
                                    from {1} as {6}
                                    where {2}
                                    order by {3}
                                    offset {4} rows fetch next {5} rows only",
                                     filter, tableName, condition, sort, offsetPosition, pageSize, Utils.SinGooPagerAlias);
            }
            else
            {
                //sqlserver2005及以上可用
                builder.AppendFormat(@"select {0}
                                from(select row_number() over(order by {3}) as rownum,*
                                    from  {1}
                                    where {2}
                                ) as {6}
                                where rownum between {4} and {5}
                                order by {3}", filter, tableName, condition, sort, startPosition, endPosition, Utils.SinGooPagerAlias);
            }

            var reader = await GetDataReaderAsync(builder.ToString(), conditionParameters);

            var refBuilder = ReflectionBuilder <T> .CreateBuilder(reader);

            while (reader.Read())
            {
                tItem = refBuilder.Build(reader, dbProviderType);
                lstResult.Add(tItem);
            }

            reader.Close();
            return(lstResult);
        }
Example #4
0
        public virtual T GetModel <T>(IDataReader reader) where T : class
        {
            var model   = default(T);
            var builder = ReflectionBuilder <T> .CreateBuilder(reader, dbProviderType);

            while (reader.Read())
            {
                model = builder.Build(reader, dbProviderType);
                break; //只取一个
            }

            reader.Close();
            return(model);
        }
Example #5
0
        public virtual async Task <IEnumerable <T> > GetListAsync <T>(string sql, DbParameter[] parameters = null) where T : class
        {
            var lstResult = new List <T>();
            var reader    = await GetDataReaderAsync(sql, parameters);

            var builder = ReflectionBuilder <T> .CreateBuilder(reader, dbProviderType);

            while (reader.Read())
            {
                T tItem = builder.Build(reader, dbProviderType);
                lstResult.Add(tItem);
            }

            reader.Close();
            return(lstResult);
        }
Example #6
0
        public static IAccessor <T> Apply <T, K>(this IAccessor <T> accessor, Expression <Func <IReturnableMember <T>, K> > returner, Expression <Action <IApplicableMember <K> > > actor)
        {
            if (accessor == null)
            {
                throw new NullReferenceException();
            }
            if (returner == null)
            {
                throw new ArgumentNullException("returner");
            }
            if (actor == null)
            {
                throw new ArgumentNullException("actor");
            }

            return(new AccessorImpl <T>(ApplyCore <T, K>(accessor.Expression, ReflectionBuilder.ReturnableMember <T, K>(returner), ReflectionBuilder.ApplicableMember <K>(actor))));
        }
Example #7
0
        public static IAccessor <T> Assign <T, K>(this IAccessor <T> accessor, Expression <Func <IAssignableMember <T>, K> > assigner, ICreator <K> creator)
        {
            if (accessor == null)
            {
                throw new NullReferenceException();
            }
            if (assigner == null)
            {
                throw new ArgumentNullException("assigner");
            }
            if (creator == null)
            {
                throw new ArgumentNullException("creator");
            }

            return(new AccessorImpl <T>(AssignCore <T, K>(accessor.Expression, ReflectionBuilder.AssignableMember <T, K>(assigner), Expression.Lambda <Func <T, K> >(creator.Expression.Body, Expression.Parameter(typeof(T))))));
        }
Example #8
0
        public static IAccessor <T> Assign <T, K>(this IAccessor <T> accessor, Expression <Func <IAssignableMember <T>, K> > assigner, Expression <Func <IValue <T>, K> > parameter)
        {
            if (accessor == null)
            {
                throw new NullReferenceException();
            }
            if (assigner == null)
            {
                throw new ArgumentNullException("assigner");
            }
            if (parameter == null)
            {
                throw new ArgumentNullException("parameter");
            }

            return(new AccessorImpl <T>(AssignCore <T, K>(accessor.Expression, ReflectionBuilder.AssignableMember <T, K>(assigner), ReflectionBuilder.GetParameter <T, K>(parameter))));
        }
Example #9
0
        public override async Task <IEnumerable <T> > GetPagerListAsync <T>(string condition, string sort, int pageIndex, int pageSize, string filter = "*", DbParameter[] conditionParameters = null)
        {
            var    lstResult = new List <T>();
            T      tItem     = default(T);
            string tableName = AttrAssistant.GetTableName(typeof(T)); //表名

            if (string.IsNullOrEmpty(condition))
            {
                condition = "1=1";
            }

            //起始记录
            int startPosition = (pageIndex - 1) * pageSize + 1;
            //截止记录
            int endPosition = pageIndex * pageSize;

            StringBuilder builder = new StringBuilder();

            builder.AppendFormat(@"select {0} from
                                ( 
                                    select t.*,rownum as rowno from 
                                    (
                                        select * from {1} {2} {3}
                                    ) t where rownum<={5}
                                ) {6} where rowno>={4}",
                                 filter, tableName,
                                 condition.IsNullOrEmpty() ? "" : " where " + condition,
                                 sort.IsNullOrEmpty() ? "" : " order by " + sort, startPosition, endPosition, Utils.SinGooPagerAlias);

            var reader = await GetDataReaderAsync(builder.ToString(), conditionParameters);

            var refBuilder = ReflectionBuilder <T> .CreateBuilder(reader, dbProviderType);

            while (reader.Read())
            {
                tItem = refBuilder.Build(reader, dbProviderType);
                lstResult.Add(tItem);
            }

            reader.Close();
            return(lstResult);
        }
Example #10
0
 public static ICopier <T, R> Copy <T, R, K>(this ICopier <T, R> copier, Expression <Func <IReturnableMember <T>, K> > source, Expression <Func <IAssignableMember <R>, K> > target)
 {
     return(new CopierImpl <T, R>(CopyCore <T, R, K>(copier.Expression, ReflectionBuilder.ReturnableMember <T, K>(source), ReflectionBuilder.AssignableMember <R, K>(target))));
 }
Example #11
0
 public static IConverter <T, N> Convert <T, R, N>(this IConverter <T, R> converter, Expression <Action <IConstructibleMember <N> > > constructMember)
 {
     return(new ConverterImpl <T, N>(ConvertCore(converter.Expression, ReflectionBuilder.ConstructibleMember <N>(constructMember))));
 }
Example #12
0
 public static IConverter <T, N> Convert <T, R, N>(this IConverter <T, R> converter, Expression <Func <IReturnableMember <R>, N> > returnMember)
 {
     return(new ConverterImpl <T, N>(SelectCore(converter.Expression, ReflectionBuilder.ReturnableMember <R, N>(returnMember))));
 }
Example #13
0
 public static IConverter <T, R> Convert <T, R>(this IAccessor <T> accessor, Expression <Action <IConstructibleMember <R> > > constructMember)
 {
     return(new ConverterImpl <T, R>(ConvertCore(accessor.Expression, ReflectionBuilder.ConstructibleMember <R>(constructMember))));
 }
Example #14
0
 public static IConverter <T, R> Convert <T, R>(this IAccessor <T> accessor, Expression <Func <IReturnableMember <T>, R> > returnMember)
 {
     return(new ConverterImpl <T, R>(SelectCore(accessor.Expression, ReflectionBuilder.ReturnableMember <T, R>(returnMember))));
 }
Example #15
0
 public static ICreator <T> Create <T>(this IAccessor <T> accessor, Expression <Action <IConstructibleMember <T> > > constructMember)
 {
     return(new CreatorImpl <T>(CreateCore <T>(accessor.Expression, ReflectionBuilder.ConstructibleMember <T>(constructMember))));
 }
Example #16
0
        public static IAccessor <T> Return <T, K>(this IAccessor <T> accessor, Expression <Func <T, K> > selector, Expression <Func <IValue <T>, K> > parameter)
        {
            if (accessor == null)
            {
                throw new NullReferenceException();
            }
            if (selector == null)
            {
                throw new ArgumentNullException("selector");
            }
            if (parameter == null)
            {
                throw new ArgumentNullException("parameter");
            }

            return(new AccessorImpl <T>(ReturnCore <T, K>(accessor.Expression, selector, ReflectionBuilder.GetParameter <T, K>(parameter))));
        }