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, 3
In 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, 3
In 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).