N.Pag enables easy pagination mechanism by evaulate LINQ string to IQueryable interface, which can You use on Entity Framework Level to filter, sort, skip & take data! Parameters are deliver to web api by QueryParams.
- Fetch nuget package.
- Create of implementation Your PaginationQuery class from base classes:
EncodedPaginationQueryBase
orPaginationQueryBase
EncodedPaginationQueryBase
- parameters Where & OrderBy must be encoded by base64,PaginationQueryBase
- parameters are normal.
- Create controler method with argument of Your query.
- Invoke method
FilterBy<TModel>(myAwesomeQuery)
on the IQuerable (DbContext or other collection). - Return Your awsome filtered data ๐คฃ!
users?pageSize=20&page=2&where=c3RhdHVzID09ICJOIg==
<=> where status == "N"
users?pageSize=20&where=c3RhdHVzID09ICJOIg==&orderBy=bmFtZS1kZXNj
<=> order by name-desc
public class GetUsersQuery : EncodedPaginationQueryBase
{
// Some additional fields
}
[HttpGet]
[ProducesResponseType(typeof(PaginationResult<User>), StatusCodes.Status200OK)]
public async Task<IActionResult> Get(GetUsersQuery query)
{
var count = await _context.Users.Where(paginationQuery).CountAsync();
var filtered = await _context.Users.FilterBy(paginationQuery).ToListAsync();
// pagination wrapper
var result = new PaginationResult<User>
{
List = filtered,
TotalCount = count
};
return Json(result);
}