public static async Task <PaginatedListResult <TViewModel> > ToPaginatedListResultForViewModelAsync <TViewModel>(this IQueryable <TViewModel> query, PaginatedSearchBaseOptionsViewModel options) { var totalCount = await query.CountAsync(); var pages = CalculateResultPages(totalCount, options.SizePerPage); if (totalCount <= options.Skip) { options.Page = totalCount / options.SizePerPage; } query = query .Skip(options.Skip) .Take(options.Take); var result = new PaginatedListResult <TViewModel> { ContextObjects = await query.ToListAsync(), TotalCount = totalCount, Pages = pages }; return(result); }
public static async Task <PaginatedListResult <TModel> > ToPaginatedListResultAsync <TModel>(this IQueryable <TModel> query, PaginatedSearchBaseOptionsViewModel options) { // TODO: Make this more understandable for developers // Important! Get count before skip and take. var totalCount = query.Count(); var pages = CalculateResultPages(totalCount, options.SizePerPage); if (totalCount <= options.Skip) { options.Page = totalCount / options.SizePerPage; } if (query.Expression.Type == typeof(IOrderedQueryable <TModel>)) { query = query.Skip(options.Skip).Take(options.Take); } var result = new PaginatedListResult <TModel> { ContextObjects = await query.ToListAsync(), TotalCount = totalCount, Pages = pages }; return(result); }