示例#1
0
        public async Task <IPagedList <TResult> > GetPagedAsync <TResult>(IPagedSpecification <TEntity> specification, Expression <Func <TEntity, TResult> > selector)
        {
            var query = QuerySet;

            if (specification.Includes.Any())
            {
                var includeProperties = specification.Includes?.Where(ip => ip != null).ToArray() ?? Enumerable.Empty <Expression <Func <TEntity, object> > >().ToArray();

                foreach (var includeProperty in includeProperties)
                {
                    query = query.Include(includeProperty);
                }
            }
            else if (specification.IncludeStrings.Any())
            {
                var includeProperties = specification.IncludeStrings?.Where(ip => !string.IsNullOrWhiteSpace(ip)).ToArray() ?? Enumerable.Empty <string>().ToArray();

                foreach (var includeProperty in includeProperties)
                {
                    query = query.Include(includeProperty);
                }
            }

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

            if (specification.OrderBy != null)
            {
                query = specification.Order == Order.Ascending ? query.OrderBy(specification.OrderBy) : query.OrderByDescending(specification.OrderBy);
            }

            if (specification.PagingEnabled)
            {
                var result = query.Select(selector).ToPagedList(specification.Page, specification.RecordsPerPage);
                return(result);
            }
            else
            {
                var result = await query.Select(selector).ToListAsync();

                return(result.ToPagedList(1, result.Count));
            }
        }
示例#2
0
 public async Task <IPagedList <TEntity> > GetPagedAsync(IPagedSpecification <TEntity> specification)
 {
     return(await GetPagedAsync <TEntity>(specification, e => e));
 }