Beispiel #1
0
        /// <summary>
        /// 分页
        /// </summary>
        /// <typeparam name="TDto">查询对象</typeparam>
        /// <param name="paging">分页对象</param>
        /// <param name="specification">查询对象</param>
        /// <param name="pagingBefore">分页前</param>
        /// <param name="pagingAfter">分页后</param>
        /// <returns></returns>
        public virtual IPagingResult <TDto> Paging <TDto>(IPaging paging,
                                                          ISpecification <TDto> specification,
                                                          Func <IQueryable <TDto>, IQueryable <TDto> > pagingBefore = null,
                                                          Func <IQueryable <TDto>, IQueryable <TDto> > pagingAfter  = null)
        {
            var query = this._storage.AsQueryable <TDto>();

            if (specification != null && specification.Expression != null)
            {
                query = query.Where(specification.Expression);
            }

            paging.TotalNumber = query.Count();

            if (pagingBefore != null)
            {
                query = pagingBefore(query);
            }

            query = query.Skip((paging.PageIndex - 1) * paging.PageSize)
                    .Take(paging.PageSize);
            if (pagingAfter != null)
            {
                query = pagingAfter(query);
            }
            return(PagingResult.Build(paging, query.ToList()));
        }