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)); }