| | | 1 | | namespace ZhEaIsNsAaBn.Infrastructure.Specifications; |
| | | 2 | | |
| | | 3 | | /// <summary>Paging for specification builders.</summary> |
| | | 4 | | public static class PaginationExtensions |
| | | 5 | | { |
| | | 6 | | private const int DefaultPage = 1; |
| | | 7 | | |
| | | 8 | | private const int DefaultPageSize = 100; |
| | | 9 | | |
| | | 10 | | |
| | | 11 | | /// <summary>Adds <c>Skip</c>/<c>Take</c> for the requested page; page 0 or less is 1, page size 0 or less is 100.</ |
| | | 12 | | /// <typeparam name="TEntity">The entity type.</typeparam> |
| | | 13 | | /// <param name="specificationBuilder">The specification builder.</param> |
| | | 14 | | /// <param name="filter">The page request.</param> |
| | | 15 | | /// <returns>The builder.</returns> |
| | | 16 | | /// <exception cref="ArgumentNullException">An argument is <see langword="null"/>.</exception> |
| | | 17 | | public static ISpecificationBuilder<TEntity> Pagination< TEntity >( this ISpecificationBuilder<TEntity> specificatio |
| | | 18 | | { |
| | 28 | 19 | | ArgumentNullException.ThrowIfNull( specificationBuilder ); |
| | 28 | 20 | | ArgumentNullException.ThrowIfNull( filter ); |
| | | 21 | | |
| | 28 | 22 | | var page = filter.Page <= 0 ? DefaultPage : filter.Page; |
| | 28 | 23 | | var pageSize = filter.PageSize <= 0 ? DefaultPageSize : filter.PageSize; |
| | | 24 | | |
| | | 25 | | |
| | 28 | 26 | | return specificationBuilder.Take( pageSize ).Skip( pageSize * ( page - 1 ) ); |
| | | 27 | | } |
| | | 28 | | } |