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)); } }
public async Task <IPagedList <TEntity> > GetPagedAsync(IPagedSpecification <TEntity> specification) { return(await GetPagedAsync <TEntity>(specification, e => e)); }