Collate.NET 1.3.1

.NET Standard 2.0
There is a newer version of this package available.
See the version list below for details.
NuGet\Install-Package Collate.NET -Version 1.3.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
dotnet add package Collate.NET --version 1.3.1
<PackageReference Include="Collate.NET" Version="1.3.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Collate.NET --version 1.3.1
#r "nuget: Collate.NET, 1.3.1"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Collate.NET as a Cake Addin
#addin nuget:?package=Collate.NET&version=1.3.1

// Install Collate.NET as a Cake Tool
#tool nuget:?package=Collate.NET&version=1.3.1


Filtering, sorting and paging extensions for .NET IQueryable collections.

Enables convenient server-side dynamic queries via Entity Framework, especially useful when working with dynamic grid controls, like Kendo UI Grid and DevExpress, where you don't want to have to implement individual filtering and sorting for each field in the data which might be sorted or filtered on.

Entity Framework


Let's say you have an MVC controller which accepts requests from a grid control:

using Collate.Implementation;

public UserController : Controller
	public ActionResult GetItems(int pageNumber, int pageSize, string sortField, string sortDirection, string filterField, string filterValue)
		var request = new PageAndFilterAndSortRequest
			PageNumber = pageNumber,
			PageSize = pageSize,
			Sorts = new ISort[]
				new Sort
					Field = sortField,
					Direction = (sortDirection == "asc")
						? SortDirection.Ascending
						: SortDirection.Descending
			Filters = new IFilter[]
				new Filter
					Field = filterField,
					Operator = FilterOperator.Contains,
					Value = filterValue

		IList<User> data;

		using (var dbContext = new MyDataContext())
			data = dbContext.Users

		return Json(data, JsonRequestBehavior.AllowGet);

This way, all the control over what field(s) to filter and sort by are in the hands of the client, as well as controlling the page and page size of the data to be viewed, and yet all the filtering is done efficiently since Entity Framework will translate the IQueryable expression into a SQL query, and all the filtering, sorting and paging will be done in-database, and the response will be just the data that is needed to show the expected data in the grid.

This is also useful for N-Tier applications where you don't want to go the nuclear option and enable odata all the way up and down the pipeline. By impelmenting a few simple interfaces you can enable performant filtering and sorting in data-heavy applications without needing to re-architect your entire application.

Please refer to the Tests project within the solution for more usage examples.

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.6.0 31,427 3/27/2020
1.5.0 328 3/27/2020
1.4.0 624 10/10/2019
1.3.2 26,128 11/8/2018
1.3.1 4,041 8/9/2018
1.2.0 729 6/16/2018
1.1.0 2,015 3/13/2018
1.0.2 786 3/12/2018
1.0.1 761 3/12/2018
1.0.0 683 3/11/2018

Adds support for additional member types in filtered objects (char, byte, sbyte, short, long, float, double)