A tiny paging library for .NET.
This library contains extension methods for IEnumerable<T> and IOrderedQueryable<T> types that make it easy to fetch a page of data from them.
| Package | Target | Description |
|---|---|---|
| ToPage | .NET Standard 2.0 | The base library |
| ToPage.EFCore | .NET Core 3.1 | Provides async overloads using EF Core's ToListAsync and CountAsync methods |
| ToPage.EF6 | .NET Framework 4.7.2 | Provides async overloads using EF6's ToListAsync and CountAsync methods |
var numbers = Enumerable.Range(1, 10);
var page = numbers.ToPage(pageNumber: 1, itemsPerPage: 3);
Console.WriteLine(string.Join(", ", page));
// Output:
// 1, 2, 3In this example, an IPage<int> object is returned from ToPage.
Its only properties are the requested PageNumber (1), and the Items on the page.
var numbers = Enumerable.Range(1, 10);
var page = numbers.ToPageWithCounts(pageNumber: 1, itemsPerPage: 3);
Console.WriteLine($"Total items: {page.ItemCount}, total pages: {page.PageCount}");
Console.WriteLine(string.Join(", ", page));
// Output:
// Total items: 10, total pages: 4
// 1, 2, 3In this example, an IPageWithCounts<int> object is returned from ToPage.
It has the same properties as an IPage<int>,
as well as an ItemCount and a PageCount which are calculated based on the size of the collection and the number of items per page requested.
// Get the 5th page of 20 users ordered alphabetically by Name
var page = await context.Users
.OrderBy(user => user.Name)
.ToPageAsync(pageNumber: 5, itemsPerPage: 20);Note: This example uses either the ToPage.EFCore or ToPage.EF6 library (both APIs are the same, choose the one for the EF version you're using).