Gridify 2.3.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Gridify --version 2.3.1                
NuGet\Install-Package Gridify -Version 2.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.
<PackageReference Include="Gridify" Version="2.3.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Gridify --version 2.3.1                
#r "nuget: Gridify, 2.3.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Gridify as a Cake Addin
#addin nuget:?package=Gridify&version=2.3.1

// Install Gridify as a Cake Tool
#tool nuget:?package=Gridify&version=2.3.1                

Gridify (A Modern Dynamic LINQ library)

Nuget Nuget Nuget (with prereleases) GitHub branch checks state

Easy and optimized way to apply Filtering, Sorting and pagination using text-based data.

Gridify is a dynamic LINQ library that converts your strings to a LINQ query in the easiest way possible with excelent performance.

The best use case of this library is Asp-net APIs. When you need to get some string base filtering conditions to filter data or sort it by a field name or apply pagination concepts to your lists and return a pageable, data grid ready information, from any repository or database. Although, we are not limited to Asp.net projects and we can use this library on any .Net projects and on any collections.

Performance comparison

Filtering is the most expensive feature in gridify. the following benchmark is comparing filtering in the most known dynamic linq libraries. As you can see, gridify has the closest result to the native linq. Also, i Should note other features like Pagination and Sorting have almost zero overhead in Gridify.

BenchmarkDotNet=v0.13.0, OS=Windows 10.0.19043.1165 (21H1/May2021Update) 11th Gen Intel Core i5-11400F 2.60GHz, 1 CPU, 12 logical and 6 physical cores .NET SDK=5.0.301 [Host] : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT DefaultJob : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT

Method Mean Error StdDev Ratio RatioSD Gen 0 Gen 1 Allocated
Native LINQ 724.329 us 6.4686 us 6.0507 us 1.000 0.00 5.8594 2.9297 37,392 B
Gridify 736.854 us 5.7427 us 5.0907 us 1.018 0.01 5.8594 2.9297 39,924 B
DynamicLinq 886.773 us 8.4943 us 7.5299 us 1.225 0.01 19.5313 9.7656 125,122 B
Sieve 961.574 us 6.6389 us 5.8852 us 1.328 0.01 8.7891 3.9063 55,186 B
Fop 2,933.332 us 49.7515 us 61.0994 us 4.076 0.11 46.8750 23.4375 315,830 B

WebApi Simple Usage example

// ApiController

public Paging<Person> GetPersons([FromQuery] GridifyQuery gQuery)
{
    // Gridify => Filter,Sort & Apply Paging 
    // in short, Gridify returns data especially for data Grids. 
    return myDbContext.Persons.Gridify(gQuery);
}

complete request sample:

http://exampleDomain.com/api/GetPersons?pageSize=100&page=1&orderBy=FirstName&filter=Age%3D%3D10

Also, we can totally ignore GridifyQuery

http://exampleDomain.com/api/GetPersons

What is GridifyQuery (basic usage example)

GridifyQuery is a simple class for configuring Filtering,Paging,Sorting.

// usually, we don't need to create this object manually
// for example, we get this object as a parameter from our API Controller
var gQuery = new GridifyQuery()
{
    Filter = "FirstName=John",
    Page = 1,
    PageSize = 20,
    OrderBy = "LastName"
};

Paging<Person> pData =
         myDbContext.Persons  // we can use Any list or repository or EntityFramework context
          .Gridify(gQuery); // Filter,Sort & Apply Paging


// pData.Count => Count persons with 'John', First name
// pData.Data      => First 20 Persons with 'John', First Name

ApplyFiltering

Also, if you don't need paging and sorting features simply use the ApplyFiltering extension instead of Gridify.

var query = myDbContext.Persons.ApplyFiltering("name = John");
// this is equal to : 
// myDbContext.Persons.Where(p => p.Name == "John");

see more examples in the tests

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (12)

Showing the top 5 NuGet packages that depend on Gridify:

Package Downloads
Gridify.EntityFramework

Gridify (EntityFramework), Easy and optimized way to apply Filtering, Sorting, and Pagination using text-based data.

KoloDev.GDS.UI

Kolo GDS UI Accelerator

Chaosage.Core.Common

Chaosage开发平台公共对象库

EasyExtensions.EntityFrameworkCore

Ready-to-use library for simplifying the development of .NET applications.

NiuX.Common

csharp common, utils, helpers, tools etc.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.15.1 2,985 11/14/2024
2.15.0 6,296 10/31/2024
2.15.0-preview7 2,876 8/28/2024
2.15.0-preview5 225 8/14/2024
2.15.0-preview4 635 7/18/2024
2.15.0-preview3 452 6/29/2024
2.15.0-preview2 296 6/22/2024
2.15.0-preview1 140 6/21/2024
2.14.2 88,377 6/8/2024
2.14.1 182,296 12/4/2023
2.14.0 5,844 11/18/2023
2.13.1 1,977 11/12/2023
2.13.0 276 11/11/2023
2.12.0 4,737 10/27/2023
2.11.1 20,754 10/6/2023
2.11.0 207 10/5/2023 2.11.0 is deprecated because it has critical bugs.
2.10.1 4,132 9/28/2023
2.10.0 2,153 9/20/2023
2.10.0-Preview1 134 9/19/2023
2.9.2 2,334 9/15/2023
2.9.1 9,539 8/22/2023
2.9.0 1,830 8/18/2023
2.8.4 63,756 4/18/2023
2.8.3 24,299 3/4/2023
2.8.2 52,604 12/7/2022
2.8.1 162,017 10/7/2022
2.8.0 11,312 7/22/2022
2.7.5 31,941 6/6/2022
2.7.4 25,284 4/22/2022
2.7.3 10,255 4/13/2022
2.7.2 1,067 4/12/2022
2.7.1 8,216 3/2/2022
2.7.0 775 3/1/2022
2.6.0 18,636 1/14/2022
2.5.0 5,992 12/27/2021
2.4.8 4,321 12/15/2021
2.4.7 415 12/14/2021
2.4.6 445 12/10/2021
2.4.5 626 12/5/2021
2.4.5-alpha5 218 12/5/2021
2.4.5-alpha4 231 12/5/2021
2.4.5-alpha3 181 12/2/2021
2.4.5-alpha1 192 12/2/2021
2.4.4 20,444 11/20/2021
2.4.3 838 11/19/2021
2.4.2 866 11/19/2021
2.4.1 2,288 11/18/2021
2.4.0 668 11/18/2021
2.3.3 581 11/16/2021
2.3.2 1,016 11/1/2021
2.3.1 1,354 10/19/2021
2.3.0 4,897 10/4/2021
2.2.1 501 9/30/2021
2.2.0 518 9/28/2021
2.1.0 4,156 9/21/2021
2.0.0 486 9/18/2021
2.0.0-beta.3 160 9/17/2021
2.0.0-beta.2 158 9/16/2021
2.0.0-beta.1 200 9/15/2021
2.0.0-alpha.1 197 8/12/2021
1.4.2 8,474 8/8/2021
1.4.1 607 8/4/2021
1.4.0 520 8/4/2021
1.3.5 1,132 7/28/2021
1.3.4 2,192 7/16/2021
1.3.3 758 7/1/2021
1.3.2 699 6/30/2021
1.3.1 686 6/23/2021
1.1.2 1,609 4/16/2021
1.1.1 624 4/16/2021
1.1.0 1,684 9/17/2020
1.0.5 10,108 7/3/2020
1.0.3 839 7/2/2020
1.0.2 958 7/2/2020 1.0.2 is deprecated because it is no longer maintained.
1.0.1 994 7/2/2020 1.0.1 is deprecated because it is no longer maintained.
1.0.0 1,257 7/1/2020 1.0.0 is deprecated because it is no longer maintained.