예제 #1
0
        private PagedQuery <TEntity> ApplyOrderFilterAndPagination(IQueryable <TEntity> query,
                                                                   IEnumerable <OrderByOption <TEntity> > orderBy,
                                                                   Expression <Func <TEntity, bool> > condition,
                                                                   PageParameters parameters)
        {
            var returnObj = new PagedQuery <TEntity>
            {
                Page     = parameters.Page,
                PageSize = parameters.PageSize
            };

            ApplyFilter(ref query, condition);
            ApplyOrder(ref query, orderBy);
            returnObj.TotalCount = query.Count();
            ApplyPagination(ref query, parameters);
            returnObj.Items = query.AsEnumerable();

            return(returnObj);
        }
예제 #2
0
        private void ApplyPagination(ref IQueryable <TEntity> query, PageParameters parameters)
        {
            var skip = (parameters.Page - 1) * parameters.PageSize;

            query = query.Skip(skip).Take(parameters.PageSize);
        }
예제 #3
0
        private async Task <PagedQuery <TEntity> > ApplyOrderFilterAndPaginationAsync(IQueryable <TEntity> query,
                                                                                      IEnumerable <OrderByOption <TEntity> > orderBy,
                                                                                      Expression <Func <TEntity, bool> > condition,
                                                                                      PageParameters parameters)
        {
            var returnObj = new PagedQuery <TEntity>
            {
                Page     = parameters.Page,
                PageSize = parameters.PageSize
            };

            ApplyFilter(ref query, condition);
            ApplyOrder(ref query, orderBy);
            var countTask = query.CountAsync();

            ApplyPagination(ref query, parameters);
            var itemsTask = query.ToListAsync();

            await Task.WhenAll(countTask, itemsTask);

            returnObj.TotalCount = await countTask;
            returnObj.Items      = (await itemsTask).AsEnumerable();

            return(returnObj);
        }
예제 #4
0
 /// <summary>
 /// Returns a object with a list of objects after order, filter and pagination and with pagination data (PageSize, Page) by async way
 /// </summary>
 /// <param name="parameters">Pagination parameters </param>
 /// <param name="orderBy">Collection with order options, can to add one or more order rules</param>
 /// <returns>Collection of paginater and filtered entities</returns>
 public async Task <PagedQuery <TEntity> > GetAllAsync(PageParameters parameters, IEnumerable <Expression <Func <TEntity, object> > > includes = null, IEnumerable <OrderByOption <TEntity> > orderBy = null)
 {
     return(await ApplyOrderFilterAndPaginationAsync(ApplyIncludes(includes), orderBy, null, parameters));
 }
예제 #5
0
 /// <summary>
 /// Returns a object with a list of objects after order, filter and pagination and with pagination data (PageSize, Page)
 /// </summary>
 /// <param name="parameters">Pagination parameters </param>
 /// <param name="orderBy">Collection with order options, can to add one or more order rules</param>
 /// <returns>Collection of paginater and filtered entities</returns>
 public virtual PagedQuery <TEntity> GetAll(PageParameters parameters, IEnumerable <Expression <Func <TEntity, object> > > includes = null, IEnumerable <OrderByOption <TEntity> > orderBy = null)
 {
     return(ApplyOrderFilterAndPagination(ApplyIncludes(includes), orderBy, null, parameters));
 }