Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }