public PaginatedData <TData> GetPaginated <TData>(IPaginationSpecification <TEntity, TData> specification) { List <TData> data = _context .Set <TEntity>() .ApplyPaginationSpecification(specification) .ToList(); int count = _context .Set <TEntity>() .ApplayBaseSpecification(specification) .Count(); return(new PaginatedData <TData>( data: data, count: count)); }
public async Task <PaginatedData <TData> > GetPaginated <TData>(IPaginationSpecification <TEntity, TData> specification) { List <TData> data = await _context .Set <TEntity>() .AsNoTracking() .ApplyPaginationSpecification(specification) .ToListAsync(); int count = await _context .Set <TEntity>() .ApplayBaseSpecification(specification) .CountAsync(); return(new PaginatedData <TData>( data: data, count: count)); }
public static IQueryable <TData> ApplyPaginationSpecification <TEntity, TData>(this IQueryable <TEntity> query, IPaginationSpecification <TEntity, TData> specification) where TEntity : class, IBaseEntity { if (specification == null) { throw new ArgumentNullException($"Specification can not be null"); } if (specification.Skip < 0 || specification.Take < 0) { throw new ArgumentOutOfRangeException($"Skip and Take must be greater then 0"); } query = query.OrderByDescending(x => x._CreatedDate); IQueryable <TData> selectQuery = query.ApplaySelectSpecification(specification); selectQuery = selectQuery .Skip(specification.Skip) .Take(specification.Take); return(selectQuery); }