Пример #1
0
        public static IQueryable <T> AsPaginatedQuery <T>(this IQueryable <T> query, IPaginatedQuery request)
        {
            if (request == null)
            {
                return(query);
            }

            var result = query;

            if (!string.IsNullOrWhiteSpace(request.SortBy))
            {
                if (request.SortOrder.Equals("DESC", System.StringComparison.OrdinalIgnoreCase))
                {
                    result = result.OrderByDescending(p => EF.Property <object>(p !, request.SortBy));
                }
                else
                {
                    result = result.OrderBy(p => EF.Property <object>(p !, request.SortBy));
                }
            }

            result = result.Skip(((request.StartPage ?? 1) - 1) * (request.PerPage ?? 0));

            if (request.PerPage != null)
            {
                result = result.Take(request.PerPage.Value);
            }

            return(result);
        }
Пример #2
0
        public static async Task <TResultContainer> PageAsync <TResult, TResultContainer>(this IQueryable <TResult> queryable, IPaginatedQuery query)
            where TResultContainer : PagedResult <TResult>, new()
        {
            var resultContainer = new TResultContainer();
            var result          = await queryable.PageAsync(query.Page ?? 1, query.Size ?? 20);

            resultContainer.Count  = result.Count;
            resultContainer.Size   = result.Size;
            resultContainer.Page   = result.Page;
            resultContainer.Result = result.Result;
            resultContainer.Pages  = result.Pages;
            return(resultContainer);
        }