Example #1
0
        public static async Task <Paginated <TResult> > PaginateAsync <TSource, TResult>(this IQueryable <TSource> query, int size, int current, Func <TSource, TResult> target, StartFrom startFrom = StartFrom.FirstPage)
        {
            var total = await query.CountAsync();

            List <TResult> result;

            if (total > 0)
            {
                var skipped = PaginationExtensions
                              .CalculateSkipped(total, size, current, startFrom);

                result = await Task.Run(() => query.Skip(skipped)
                                        .Take(size)
                                        .Select(target)
                                        .ToList());
            }
            else
            {
                result = await Task.Run(() => query.Select(target)
                                        .ToList());
            }


            return(new Paginated <TResult>(result, current, size, total));
        }
        public virtual async Task <IResult> GetAllAsync(Expression <Func <T, bool> > predicate = null, PaginationQuery paginationQuery = null)
        {
            var data = repository.Get(predicate, paginationQuery);

            if (data == null)
            {
                return(new Result(HttpStatusCode.NotFound, "NotFound"));
            }

            var list = await data.ToListAsync();

            var count = await repository.CountAsync();

            return(PaginationExtensions.CreatePaginationResult(list, HttpStatusCode.OK, paginationQuery, count, uriService));
        }