public Task <IPagedResults <IAssetRegisterVersion> > Search(IPagedQuery searchRequest, CancellationToken cancellationToken)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                IQueryable <AssetRegisterVersionEntity> queryable = context.AssetRegisterVersions;

                queryable = queryable.OrderByDescending(o => o.Id)
                            .Skip((searchRequest.Page.Value - 1) * searchRequest.PageSize.Value)
                            .Take(searchRequest.PageSize.Value);

                IEnumerable <AssetRegisterVersionEntity> results = queryable.ToList();

                int totalCount = context.AssetRegisterVersions.Select(s => s.Id).Count();
                IPagedResults <IAssetRegisterVersion> pagedResults = new PagedResults <IAssetRegisterVersion>
                {
                    Results = results.Select(s => new AssetRegisterVersion
                    {
                        Id = s.Id,
                        ModifiedDateTime = s.ModifiedDateTime
                    } as IAssetRegisterVersion).ToList(),
                    TotalCount    = totalCount,
                    NumberOfPages = (int)Math.Ceiling(totalCount / (decimal)searchRequest.PageSize.Value)
                };
                return(Task.FromResult(pagedResults));
            }
        }
示例#2
0
        public static PageData GetPageData(IPagedQuery query)
        {
            int offset;

            if (!query.Page.HasValue ||
                !query.PerPage.HasValue)
            {
                offset = 0;
            }
            else
            {
                offset = (query.Page.Value - 1) * query.PerPage.Value;
            }

            int next;

            if (!query.PerPage.HasValue)
            {
                next = int.MaxValue;
            }
            else
            {
                next = query.PerPage.Value;
            }

            return(new PageData(offset, next));
        }
示例#3
0
        public PagedResult <TEntity> Find <TEntity>(IPagedQuery <TEntity> query, int pageNumber, int itemsPerPage) where TEntity : class
        {
            var skip = pageNumber * itemsPerPage;

            return(query.Execute(session,
                                 databaseProvider(),
                                 skip, itemsPerPage));
        }
        public async Task <PagedResponse <CaffItemDto> > GetPagedCaffItemsAsync(IPagedQuery pagedQuery)
        {
            var response = await _context
                           .CaffItems
                           .ToPagedAsync <CaffItem, CaffItemDto>(pagedQuery, _mapper);

            await _fileService.SetPreviewFileUris(response.Results.Select(r => r.PreviewFile));

            return(response);
        }
示例#5
0
        private static void AddPaginationToQueryBuilder(IDapperQuery dapperQuery, IPagedQuery pagedQuery)
        {
            var sqlBuilder = dapperQuery.SqlBuilder;
            var config     = pagedQuery.PagingConfiguration !;

            var offset = config.ItemsPerPage * (config.Page - 1);

            sqlBuilder.Offset("@Paging_Offset", new { Paging_Offset = offset });
            sqlBuilder.FetchNext("@Paging_FetchNext", new { Paging_FetchNext = config.ItemsPerPage });
        }
示例#6
0
        protected IHttpActionResult Page <T>(IPagedQuery query, bool withoutProjection = false)
        {
            var viewModel = MapViewModel <IEnumerable <T>, T>(query, withoutProjection);

            return(Ok(new
            {
                Result = viewModel,
                query?.Total
            }));
        }
        public override Task <IPagedEnumerable <TResult> > Execute(IPagedQuery <TResult> query, CancellationToken cancellationToken,
                                                                   IContainer container)
        {
            Task <IPagedEnumerable <TResult> > Handler() => container.ResolveHandler <IPagedQueryHandler <TQuery, TResult> >().Execute((TQuery)query, cancellationToken);

            return(container
                   .ResolveAll <IPipelineBehavior <TQuery, IPagedEnumerable <TResult> > >()
                   .Reverse()
                   .Aggregate((HandlerDelegate <IPagedEnumerable <TResult> >)Handler, (next, pipeline) => () => pipeline.Execute((TQuery)query, cancellationToken, next))());
        }
示例#8
0
 /// <summary>
 /// Requests the next page to the API, and returns it wrapped in an <see cref="IBridgeResponseCollection{T}"/> object.
 /// </summary>
 /// <returns>A wrapper around the response to the request for a next page. In abscence of a next page, this method returns the current page from the internal cache.</returns>
 public IBridgeResponseCollection <T> More()
 {
     if (HasMore)
     {
         if (EndpointBuilder.Query is IPagedQuery)
         {
             IPagedQuery paged = (IPagedQuery)EndpointBuilder.Query;
             paged.Page = (paged.Page ?? 1) + 1;
             return(_requestHandler.ProcessRequest <T>(EndpointBuilder));
         }
     }
     return(this);
 }
示例#9
0
        public Task <IPagedEnumerable <TResult> > ExecuteAsync <TResult>(IPagedQuery <TResult> query, CancellationToken cancellationToken = default) where TResult : class
        {
            if (query is null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            var queryType = query.GetType();

            var handler = (PagedQueryHandlerWrapper <TResult>)_pagedQueryHandlers.GetOrAdd(queryType,
                                                                                           t => Activator.CreateInstance(typeof(PagedQueryHandlerWrapperImpl <,>).MakeGenericType(queryType, typeof(TResult))));

            return(handler.Execute(query, cancellationToken, this.container));
        }
示例#10
0
 public static IFindFluent <T, T> Limit <T>(this IFindFluent <T, T> collection, IPagedQuery query)
 => collection.Limit(query.Page, query.Results);
示例#11
0
 public static async Task <PagedResult <T> > PaginateAsync <T>(this IMongoQueryable <T> collection, IPagedQuery query)
 => await collection.PaginateAsync(query.OrderBy, query.SortOrder, query.Page, query.Results);
示例#12
0
 public async Task <IPagedResult <License> > BrowseAsync(Guid customerId, IPagedQuery query)
 => await _repository.BrowseAsync(license => license.CustomerId == customerId, query);
示例#13
0
 public static PagedResult <T> Paginate <T>(this IEnumerable <T> values, IPagedQuery query)
 => values.Paginate(query.Page, query.Results);
示例#14
0
 protected CrudPageingController(IPagedQuery <TPoco> pageing, ICrudService <TPoco> crudservice)
     : base(crudservice)
 {
     _pageing = pageing;
 }
示例#15
0
 public static async Task <PagedResult <T> > PaginateAsync <T>(this IMongoQueryable <T> collection, IPagedQuery query)
 {
     return(await collection.PaginateAsync(query.Page, query.Results));
 }
示例#16
0
 public virtual async Task<PagedCollection<MovementDto>> FormatResult(IPagedQuery query, IOrderedQueryable<Movement> movements)
 {
     return await movements.Map().ToPagedCollectionAsync(query);
 }
示例#17
0
 private static TCollection MapViewModel <TCollection, T>(IPagedQuery query, bool withoutProjection)
 {
     if (query == null)
     {
         return(default);
示例#18
0
 public T Execute <T>(IPagedQuery <T> query, int numberOfItems, int page)
 {
     return(query.Execute(dataStore, numberOfItems, page));
 }
示例#19
0
 public static Task <PagedResultFromStart <T> > PaginateFromStartAsync <T, TKey>(this IFindFluent <T, T> collection, IPagedQuery query, long?totalResultsInCollection)
     where T : IIdentifiable <TKey>
 => PaginateFromStartAsync <T, TKey>(collection, query.Page, query.Results, totalResultsInCollection);
示例#20
0
 public static IMongoQueryable <T> Limit <T>(this IMongoQueryable <T> collection, IPagedQuery query)
 => collection.Limit(query.Page, query.Results);
示例#21
0
 public static async Task <PagedResult <T> > Paginate <T>(this IMongoQueryable <T> collection, IPagedQuery query, CancellationToken cancellationToken = default)
 => await collection.Paginate(query.OrderBy, query.SortOrder, query.Page, query.Results, cancellationToken);
        public static async Task <PagedResponse <TDestination> > ToPagedAsync <TSource, TDestination>(this IQueryable <TSource> query, IPagedQuery pagedQuery, IMapper mapper) where TSource : class
        {
            var result = new PagedResponse <TDestination>
            {
                CurrentPage      = pagedQuery.Page,
                PageSize         = pagedQuery.PageSize,
                TotalResultCount = await query.CountAsync()
            };

            var skip = (pagedQuery.Page - 1) * pagedQuery.PageSize;

            result.Results = await query
                             .Skip(skip)
                             .Take(pagedQuery.PageSize)
                             .ProjectTo <TDestination>(mapper.ConfigurationProvider)
                             .ToListAsync();

            return(result);
        }
示例#23
0
 public static async Task <IPagedResult <T> > PaginateAsync <T>(this IQueryable <T> collection, IPagedQuery query)
 => await collection.PaginateAsync(query.Page, query.Results);
示例#24
0
 public static Task <PagedResult <T> > PaginateAsync <T, TKey>(this IMongoQueryable <T> collection, IPagedQuery query)
     where T : IIdentifiable <TKey>
 => PaginateAsync <T, TKey>(collection, query.Results);
示例#25
0
 public TEntity FindFirstOrDefault <TEntity>(IPagedQuery <TEntity> query) where TEntity : class
 {
     return(One(Find(query, 0, 1), false));
 }
示例#26
0
 public PagedResult <TEntity> Find <TEntity>(IPagedQuery <TEntity> query, int pageNumber, int itemsPerPage) where TEntity : class
 {
     return(query.Execute(beerDbContext, (pageNumber - 1) * itemsPerPage, itemsPerPage));
 }
示例#27
0
 public TEntity FindFirstOrDefault <TEntity>(IPagedQuery <TEntity> query) where TEntity : class
 {
     return(query.Execute(beerDbContext, 0, 1).FirstOrDefault());
 }
 public abstract Task <IPagedEnumerable <TResult> > Execute(IPagedQuery <TResult> query, CancellationToken cancellationToken,
                                                            IContainer container);
示例#29
0
        public static async Task <bool> QueryAllPages <T>(this IQueryDispatcher queryDispatcher, IPagedQuery <T> query, Func <T, bool> callback)
        {
            IPagedResult <T> page;

            do
            {
                page = await queryDispatcher.QueryAsync(query);

                foreach (var item in page.Items)
                {
                    if (callback(item))
                    {
                        return(true);
                    }
                }

                page.Bind(p => p.CurrentPage, page.CurrentPage + 1); // todo yuck
            } while (page.CurrentPage < page.TotalPages);

            return(false);
        }
示例#30
0
 public PagedResult <T> Find <T>(IPagedQuery <T> query)
 {
     return(query.Execute(Session));
 }
        public static async Task <ListDto <T2> > ProjectAndPageAsync <T1, T2>(this IQueryable <T1> queryable, IPagedQuery query)
            where T1 : class
            where T2 : class
        {
            var count = await queryable.CountAsync();

            var items = await queryable.Skip(query.PageIndex *query.PageSize)
                        .Take(query.PageSize)
                        .ProjectTo <T2>()
                        .ToListAsync();

            return(new ListDto <T2>()
            {
                Count = count,
                PageSize = query.PageSize,
                PageIndex = query.PageIndex,
                Items = items
            });
        }