https://github.com/dotnetcore/collections
Utilities and extensions for Collections includes Collections.Paginable and so on...
https://github.com/dotnetcore/collections
paginable
Last synced: about 1 year ago
JSON representation
Utilities and extensions for Collections includes Collections.Paginable and so on...
- Host: GitHub
- URL: https://github.com/dotnetcore/collections
- Owner: dotnetcore
- License: mit
- Created: 2017-07-07T08:53:05.000Z (almost 9 years ago)
- Default Branch: dev
- Last Pushed: 2024-07-08T14:29:12.000Z (almost 2 years ago)
- Last Synced: 2025-03-29T17:12:24.569Z (about 1 year ago)
- Topics: paginable
- Language: C#
- Homepage:
- Size: 183 KB
- Stars: 89
- Watchers: 15
- Forks: 17
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Collections
[](https://github.com/dotnetcore)
[](https://raw.githubusercontent.com/dotnetcore/CAP/master/LICENSE.txt)
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fdotnetcore%2FCollections?ref=badge_shield)
NCC Collections consists of a set of collection-based extensions and tools, such as paging extensions.
## Nuget Packages
| Package Name | Version | Downloads |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| [DotNetCore.Collections.Paginable](https://www.nuget.org/packages/DotNetCore.Collections.Paginable/) |  |  |
| [DotNetCore.Collections.Paginable.Chloe](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.Chloe/) |  |  |
| [DotNetCore.Collections.Paginable.DosOrm](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.DosOrm/) |  |  |
| [DotNetCore.Collections.Paginable.EntityFrameworkCore](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.EntityFrameworkCore/) |  |  |
| [DotNetCore.Collections.Paginable.FreeSql](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.FreeSql/) |  |  |
| [DotNetCore.Collections.Paginable.NHibernate](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.NHibernate/) |  |  |
| [DotNetCore.Collections.Paginable.SqlKata](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.SqlKata/) |  |  |
| [DotNetCore.Collections.Paginable.SqlSugar](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.SqlSugar/) |  |  |
## Usage
### Install the package
```
Install-Package DotNetCore.Collections.Paginable
```
### Write code
```c#
IEnumerable list = GetList();//...
//Get a collection of Page, each page has 50 PageMembers
var paginableList = list.ToPaginable(50);
//Get page 15th
var page = paginableList.GetPage(15);
for (var i = 0; i < page.CurrentPageSize; i++)
{
var itemNumber = page[i].ItemNumber;
var itemValue = page[i].Value;
}
```
Or use a more streamlined code:
```c#
IEnumerable list = GetList();//...
//Get page 15th, each page has 50 items.
ar page = list.GetPage(15, 50);
for (var i = 0; i < page.CurrentPageSize; i++)
{
var itemNumber = page[i].ItemNumber;
var itemValue = page[i].Value;
}
```
### Work with IQueryable<T>
You can get `IQueryable` from `Where` in EfCore or `Query` in NHibernate, and then:
```c#
IQueryable queryable = GetQueryable();//...
var page = queryable.GetPage(15, 50);
var totalMemberCount = page.TotalMemberCount;
for(var i = 0; i < page.CurrentPageSize; i++)
{
var itemNumber = page[i].ItemNumber;
var itemValue = page[i].Value;
}
```
Just do it.
### Work with ORMs
#### For Chloe ORM
Install `DotNetCore.Collections.Paginable.Chloe` package:
```
Install-Package DotNetCore.Collections.Paginable.Chloe
```
then:
```c#
//... do some config for Chloe by EntityTypeBuilder
using(var db = new MsSqlContext(connectionString))
{
var page = db.Query().GetPage(15, 50);
var totalPageCount = page.TotalPageCount;
var totalMemberCount = page.TotalMemberCount;
var pageSize = page.PageSize;
var currentPageNumber = page.CurrentPageNumber;
var currentPageSize = page.CurrentPageSize;
var hasNext = page.HasNext;
var HasPrevious = page.HasPrevious;
for(var i = 0; i < currentPageSize; i++)
{
var id = page[i].Value.Id;
}
}
```
#### For Dos.ORM
Install `DotNetCore.Collections.Paginable.DosOrm` package:
```
Install-Package DotNetCore.Collections.Paginable.DosOrm
```
then:
```c#
var _session = new DbSession(DatabaseType.SqlServer, connectionString);
var page = _dosOrmSession.From().GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
.
.
.
class ExampleModel : Entity
{
public ExampleModel() : base("ExampleModels") { }
public virtual int Id { get; set; }
public override Field[] GetPrimaryKeyFields() => new Field[] { new Field("Id"), };
}
```
#### For FreeSql
Install `DotNetCore.Collections.Paginable.FreeSql` package:
```
Install-Package DotNetCore.Collections.Paginable.FreeSql
```
then:
```c#
var _freeSql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(DataType.SqlServer, connectionString)
.UseAutoSyncStructure(false)
.Build();
//... do some config for FreeSql
var page = _freeSql.Select().GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
```
or call the extension method of DbSet directly:
```c#
var ctx = _freeSql.CreateDbContext();
var source = ctx.Set();
var page = source.GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
```
or
```c#
using(var ctx = new ExampleDbContext())
{
var page = ctx.ExampleModels.GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
}
.
.
.
class ExampleDbContext: DbContext
{
public DbSet ExampleModel {get; set;}
protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
builder.UseFreeSql(_freeSqlInstance);
}
}
```
#### For SqlSugar
Install `DotNetCore.Collections.Paginable.SqlSugar` package:
```
Install-Package DotNetCore.Collections.Paginable.SqlSugar
```
then:
```c#
var sqlSugar = new SqlSugatClient(new ConnectionConfig{
ConnectionString = connectionString,
DbType = DbTypee.SqlServer,
IsAutoCloseConnection = true
});
//... do some config for sqlSugar
var page = _sqlSugar.Query().GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
```
#### For NHibernate
Install `DotNetCore.Collections.Paginable.NHibernate` package:
```
Install-Package DotNetCore.Collections.Paginable.NHibernate
```
then:
```c#
//... do some config for NHibernate by FluentNHibernate.ClassMap
using(var session = GetAndOpenSession())
{
var page = session.QueryOver().GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
}
```
#### For Microsoft.EntityFrameworkCore
```c#
//... do come config for EFCore
using(var context = new ExampleDbContext())
{
var page = context.ExampleModels.Where(x => x.Id > 100).GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
}
```
or call the extension method of DbSet directly:
Install `DotNetCore.Collections.Paginable.EntityFrameworkCore` package first:
```
Install-Package DotNetCore.Collections.Paginable.EntityFrameworkCore
```
then:
```c#
using(var context = new ExampleDbContext())
{
var pagee = context.ExampleModels.GetPage(1, 9);
var totalPageCount = page.TotalPageCount;
//...
}
//...
```
#### For SqlKata with Dapper
Install `DotNetCore.Collections.Paginable.SqlKata` package:
```
Install-Package DotNetCore.Collections.Paginable.SqlKata
```
then:
```c#
using(var connection = new SqlConnection(connectionString))
{
connection.Open();
var compiler = new SqlServerCompiler();
var db = new QueryFactory(connection, compiler);
var page = db.Query("ExampleModels").GetPage(1, 9);
var totalPageCount = page.TotalCount;
//...
}
```
### Examples
- [DotNetCore.Collections.Paginable with EFCore](https://github.com/dotnetcore/Collections/blob/dev/sample/Sample.EfCore/Program.cs)
- [DotNetCore.Collections.Paginable with EF6](https://github.com/dotnetcore/Collections/blob/dev/sample/Sample.Ef/Program.cs)
## License
Member project of [The NCC](https://github.com/dotnetcore), MIT
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fdotnetcore%2FCollections?ref=badge_large)