{"id":18736321,"url":"https://github.com/dotnetcore/collections","last_synced_at":"2025-04-05T19:12:19.515Z","repository":{"id":47353915,"uuid":"96519470","full_name":"dotnetcore/Collections","owner":"dotnetcore","description":"Utilities and extensions for Collections includes Collections.Paginable and so on...","archived":false,"fork":false,"pushed_at":"2024-07-08T14:29:12.000Z","size":187,"stargazers_count":89,"open_issues_count":3,"forks_count":17,"subscribers_count":15,"default_branch":"dev","last_synced_at":"2025-03-29T17:12:24.569Z","etag":null,"topics":["paginable"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotnetcore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-07T08:53:05.000Z","updated_at":"2024-11-18T17:57:01.000Z","dependencies_parsed_at":"2024-01-13T17:48:10.746Z","dependency_job_id":"1a8a9a37-b086-4314-a7e5-e226f5ef7dd0","html_url":"https://github.com/dotnetcore/Collections","commit_stats":{"total_commits":72,"total_committers":5,"mean_commits":14.4,"dds":0.1527777777777778,"last_synced_commit":"d42f4dfc163322b937064e477a2e8ff2222cfc3f"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetcore%2FCollections","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetcore%2FCollections/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetcore%2FCollections/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetcore%2FCollections/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotnetcore","download_url":"https://codeload.github.com/dotnetcore/Collections/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247386265,"owners_count":20930619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["paginable"],"created_at":"2024-11-07T15:20:14.426Z","updated_at":"2025-04-05T19:12:19.485Z","avatar_url":"https://github.com/dotnetcore.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Collections\n\n[![Member project of .NET Core Community](https://img.shields.io/badge/member%20project%20of-NCC-9e20c9.svg)](https://github.com/dotnetcore)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dotnetcore/CAP/master/LICENSE.txt)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fdotnetcore%2FCollections.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fdotnetcore%2FCollections?ref=badge_shield)\n\nNCC Collections consists of a set of collection-based extensions and tools, such as paging extensions.\n\n## Nuget Packages\n\n| Package Name                                                                                                                                 | Version                                                                                      | Downloads                                                                                     |\n| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |\n| [DotNetCore.Collections.Paginable](https://www.nuget.org/packages/DotNetCore.Collections.Paginable/)                                         | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.svg)                     | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.svg)                     |\n| [DotNetCore.Collections.Paginable.Chloe](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.Chloe/)                             | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.Chloe.svg)               | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.Chloe.svg)               |\n| [DotNetCore.Collections.Paginable.DosOrm](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.DosOrm/)                           | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.DosOrm.svg)              | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.DosOrm.svg)              |\n| [DotNetCore.Collections.Paginable.EntityFrameworkCore](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.EntityFrameworkCore/) | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.EntityFrameworkCore.svg) | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.EntityFrameworkCore.svg) |\n| [DotNetCore.Collections.Paginable.FreeSql](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.FreeSql/)                         | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.FreeSql.svg)             | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.FreeSql.svg)             |\n| [DotNetCore.Collections.Paginable.NHibernate](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.NHibernate/)                   | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.NHibernate.svg)          | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.NHibernate.svg)          |\n| [DotNetCore.Collections.Paginable.SqlKata](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.SqlKata/)                         | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.SqlKata.svg)             | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.SqlKata.svg)             |\n| [DotNetCore.Collections.Paginable.SqlSugar](https://www.nuget.org/packages/DotNetCore.Collections.Paginable.SqlSugar/)                       | ![](https://img.shields.io/nuget/v/DotNetCore.Collections.Paginable.SqlSugar.svg)            | ![](https://img.shields.io/nuget/dt/DotNetCore.Collections.Paginable.SqlSugar.svg)            |\n\n## Usage\n\n### Install the package\n\n```\nInstall-Package DotNetCore.Collections.Paginable\n```\n\n### Write code\n\n```c#\nIEnumerable\u003cExampleModel\u003e list = GetList();//...\n\n//Get a collection of Page, each page has 50 PageMembers\nvar paginableList = list.ToPaginable(50);\n\n//Get page 15th\nvar page = paginableList.GetPage(15);\n\nfor (var i = 0; i \u003c page.CurrentPageSize; i++)\n{\n    var itemNumber = page[i].ItemNumber;\n    var itemValue = page[i].Value;\n}\n```\n\nOr use a more streamlined code:\n\n```c#\nIEnumerable\u003cExampleModel\u003e list = GetList();//...\n\n//Get page 15th, each page has 50 items.\nar page = list.GetPage(15, 50);\n\nfor (var i = 0; i \u003c page.CurrentPageSize; i++)\n{\n    var itemNumber = page[i].ItemNumber;\n    var itemValue = page[i].Value;\n}\n```\n\n### Work with IQueryable\u0026lt;T\u0026gt;\n\nYou can get `IQueryable\u003cT\u003e` from `Where` in EfCore or `Query\u003cT\u003e` in NHibernate, and then:\n\n```c#\nIQueryable\u003cExampleModel\u003e queryable = GetQueryable();//...\n\nvar page = queryable.GetPage(15, 50);\n\nvar totalMemberCount = page.TotalMemberCount;\n\nfor(var i = 0; i \u003c page.CurrentPageSize; i++)\n{\n    var itemNumber = page[i].ItemNumber;\n    var itemValue = page[i].Value;\n}\n```\n\nJust do it.\n\n### Work with ORMs\n\n#### For Chloe ORM\n\nInstall `DotNetCore.Collections.Paginable.Chloe` package:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.Chloe\n```\n\nthen:\n\n```c#\n//... do some config for Chloe by EntityTypeBuilder\u003cExampleModel\u003e\n\nusing(var db = new MsSqlContext(connectionString))\n{\n    var page = db.Query\u003cExampleModel\u003e().GetPage(15, 50);\n\n    var totalPageCount = page.TotalPageCount;\n    var totalMemberCount = page.TotalMemberCount;\n    var pageSize = page.PageSize;\n\n    var currentPageNumber = page.CurrentPageNumber;\n    var currentPageSize = page.CurrentPageSize;\n\n    var hasNext = page.HasNext;\n    var HasPrevious = page.HasPrevious;\n\n    for(var i = 0; i \u003c currentPageSize; i++)\n    {\n        var id = page[i].Value.Id;\n    }\n}\n```\n\n#### For Dos.ORM\n\nInstall `DotNetCore.Collections.Paginable.DosOrm` package:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.DosOrm\n```\n\nthen:\n\n```c#\nvar _session = new DbSession(DatabaseType.SqlServer, connectionString);\n\nvar page = _dosOrmSession.From\u003cExampleModel\u003e().GetPage(1, 9);\n\nvar totalPageCount = page.TotalPageCount;\n//...\n\n.\n.\n.\n\nclass ExampleModel : Entity\n{\n    public ExampleModel() : base(\"ExampleModels\") { }\n\n    public virtual int Id { get; set; }\n\n    public override Field[] GetPrimaryKeyFields() =\u003e new Field[] { new Field(\"Id\"), };\n}\n```\n\n#### For FreeSql\n\nInstall `DotNetCore.Collections.Paginable.FreeSql` package:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.FreeSql\n```\n\nthen:\n\n```c#\nvar _freeSql = new FreeSql.FreeSqlBuilder()\n    .UseConnectionString(DataType.SqlServer, connectionString)\n    .UseAutoSyncStructure(false)\n    .Build();\n\n//... do some config for FreeSql\n\nvar page = _freeSql.Select\u003cExampleModel\u003e().GetPage(1, 9);\n\nvar totalPageCount = page.TotalPageCount;\n//...\n```\n\nor call the extension method of DbSet directly:\n\n```c#\nvar ctx = _freeSql.CreateDbContext();\nvar source = ctx.Set\u003cExampleModel\u003e();\n\nvar page = source.GetPage(1, 9);\n\nvar totalPageCount = page.TotalPageCount;\n//...\n```\n\nor\n\n```c#\nusing(var ctx = new ExampleDbContext())\n{\n    var page = ctx.ExampleModels.GetPage(1, 9);\n\n    var totalPageCount = page.TotalPageCount;\n    //...\n}\n\n.\n.\n.\n\nclass ExampleDbContext: DbContext\n{\n    public DbSet\u003cExampleModel\u003e ExampleModel {get; set;}\n\n    protected override void OnConfiguring(DbContextOptionsBuilder builder)\n    {\n        builder.UseFreeSql(_freeSqlInstance);\n    }\n}\n```\n\n#### For SqlSugar\n\nInstall `DotNetCore.Collections.Paginable.SqlSugar` package:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.SqlSugar\n```\n\nthen:\n\n```c#\nvar sqlSugar = new SqlSugatClient(new ConnectionConfig{\n    ConnectionString = connectionString,\n    DbType = DbTypee.SqlServer,\n    IsAutoCloseConnection = true\n});\n\n//... do some config for sqlSugar\n\nvar page = _sqlSugar.Query\u003cExampleModel\u003e().GetPage(1, 9);\n\nvar totalPageCount = page.TotalPageCount;\n//...\n```\n\n#### For NHibernate\n\nInstall `DotNetCore.Collections.Paginable.NHibernate` package:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.NHibernate\n```\n\nthen:\n\n```c#\n//... do some config for NHibernate by FluentNHibernate.ClassMap\u003cExampleModel\u003e\n\nusing(var session = GetAndOpenSession())\n{\n    var page = session.QueryOver\u003cExampleModel\u003e().GetPage(1, 9);\n\n    var totalPageCount = page.TotalPageCount;\n    //...\n}\n```\n\n#### For Microsoft.EntityFrameworkCore\n\n```c#\n//... do come config for EFCore\n\nusing(var context = new ExampleDbContext())\n{\n    var page = context.ExampleModels.Where(x =\u003e x.Id \u003e 100).GetPage(1, 9);\n\n    var totalPageCount = page.TotalPageCount;\n    //...\n}\n```\n\nor call the extension method of DbSet directly:\n\nInstall `DotNetCore.Collections.Paginable.EntityFrameworkCore` package first:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.EntityFrameworkCore\n```\n\nthen:\n\n```c#\nusing(var context = new ExampleDbContext())\n{\n    var pagee = context.ExampleModels.GetPage(1, 9);\n\n    var totalPageCount = page.TotalPageCount;\n    //...\n}\n//...\n```\n\n#### For SqlKata with Dapper\n\nInstall `DotNetCore.Collections.Paginable.SqlKata` package:\n\n```\nInstall-Package DotNetCore.Collections.Paginable.SqlKata\n```\n\nthen:\n\n```c#\nusing(var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n\n    var compiler = new SqlServerCompiler();\n    var db = new QueryFactory(connection, compiler);\n\n    var page = db.Query(\"ExampleModels\").GetPage\u003cExampleModel\u003e(1, 9);\n\n    var totalPageCount = page.TotalCount;\n    //...\n}\n```\n\n### Examples\n\n- [DotNetCore.Collections.Paginable with EFCore](https://github.com/dotnetcore/Collections/blob/dev/sample/Sample.EfCore/Program.cs)\n- [DotNetCore.Collections.Paginable with EF6](https://github.com/dotnetcore/Collections/blob/dev/sample/Sample.Ef/Program.cs)\n\n## License\n\nMember project of [The NCC](https://github.com/dotnetcore), MIT\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fdotnetcore%2FCollections.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fdotnetcore%2FCollections?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnetcore%2Fcollections","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnetcore%2Fcollections","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnetcore%2Fcollections/lists"}