KendoNET.DynamicLinq
3.2.0
dotnet add package KendoNET.DynamicLinq --version 3.2.0
NuGet\Install-Package KendoNET.DynamicLinq -Version 3.2.0
<PackageReference Include="KendoNET.DynamicLinq" Version="3.2.0" />
<PackageVersion Include="KendoNET.DynamicLinq" Version="3.2.0" />
<PackageReference Include="KendoNET.DynamicLinq" />
paket add KendoNET.DynamicLinq --version 3.2.0
#r "nuget: KendoNET.DynamicLinq, 3.2.0"
#:package KendoNET.DynamicLinq@3.2.0
#addin nuget:?package=KendoNET.DynamicLinq&version=3.2.0
#tool nuget:?package=KendoNET.DynamicLinq&version=3.2.0
KendoNET.DynamicLinq
Description
KendoNET.DynamicLinq implements server paging, filtering, sorting, grouping, and aggregating to Kendo UI via Dynamic Linq for .Net Core App(1.x ~ 3.x).
Prerequisites
.Net Core 1 ~ 2
- None
.Net Core 3
- You must add custom
ObjectToInferredTypesConverterto yourJsonSerializerOptionssinceSystem.Text.Jsondidn't deserialize inferred type to object properties now, see the sample code and reference.
Usage
- Add the KendoNET.DynamicLinq NuGet package to your project.
- Configure your Kendo DataSource to send its options as JSON.
parameterMap: function(options, type) {
return JSON.stringify(options);
}
- Configure the
schemaof the dataSource.
schema: {
data: "Data",
total: "Total",
aggregates: "Aggregates",
groups: "Groups",
errors: "Errors"
}
- The completed code like below.
..... Other kendo grid code .....
dataSource: {
schema:
{
data: "Data",
total: "Total",
aggregates: "Aggregates",
groups: "Groups",
errors: "Errors",
...
},
transport: {
read: {
url: 'your read url',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
type: 'POST'
},
create: {
url: 'your create url',
dataType: "json",
contentType: 'application/json; charset=utf-8',
type: 'POST'
},
parameterMap: function (data, operation) {
return JSON.stringify(data);
}
},
error: function(e) {
console.log(e.errors); // Your error information
e.sender.cancelChanges();
},
pageSize: 20,
serverPaging: true,
serverFiltering: true,
serverSorting: true,
...
}
..... Other kendo grid code .....
- Import the KendoNET.DynamicLinq namespace.
- Use the
ToDataSourceResultextension method to apply paging, sorting, filtering, grouping and aggregating.
using KendoNET.DynamicLinq
[WebMethod]
public static DataSourceResult Products(int take, int skip, IEnumerable<Sort> sort, Filter filter, IEnumerable<Aggregator> aggregates, IEnumerable<Group> groups)
{
using (var northwind = new Northwind())
{
return northwind.Products
.OrderBy(p => p.ProductID) // EF requires ordering for paging
.Select(p => new ProductViewModel // Use a view model to avoid serializing internal Entity Framework properties as JSON
{
ProductID = p.ProductID,
ProductName = p.ProductName,
UnitPrice = p.UnitPrice,
UnitsInStock = p.UnitsInStock,
Discontinued = p.Discontinued
})
.ToDataSourceResult(take, skip, sort, filter, aggregates, groups);
}
}
or from Kendo UI request
using KendoNET.DynamicLinq
[HttpPost]
public IActionResult Products([FromBody] DataSourceRequest requestModel)
{
using (var northwind = new Northwind())
{
return northwind.Products
.Select(p => new ProductViewModel // Use a view model to avoid serializing internal Entity Framework properties as JSON
{
ProductID = p.ProductID,
ProductName = p.ProductName,
UnitPrice = p.UnitPrice,
UnitsInStock = p.UnitsInStock,
Discontinued = p.Discontinued
})
.ToDataSourceResult(requestModel.Take, requestModel.Skip, requestModel.Sort, requestModel.Filter, requestModel.Aggregate, requestModel.Group);
}
}
Known Issues
When server-side filterable options are enabled and apply a query with filter condition that contains DateTime type column, then EntityFramework Core would throw an
exception System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting date and/or time from character string. The error is caused by a known issue in some old EntityFramework
Core versions. The workaround is adding datetime value to the related column in DbContext. e.g.
public class MyContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
..........
modelBuilder.Entity<Member>().Property(x => x.UpdateTime).HasColumnType("datetime");
..........
}
}
How To Build NuGet Package
- Open command line console
- Switch to project root directory(src\KendoNET.DynamicLinq).
- Run "dotnet restore"
- Run "dotnet pack --configuration Release"
- Add
<repository type="git" url="https://github.com/linmasaki/KendoNET.DynamicLinq.git" />to package metadata of nupkg to show repository URL at Nuget
Note
- KendoNET.DynamicLinq is a reference to Ali Sarkis's Kendo.DynamicLinq.
- This package was previously published as
Kendo.DynamicLinqCore. Due to a trademark concern, and following coordination with the trademark holder, the project was renamed toKendoNET.DynamicLinq. The old package has since been delisted from NuGet; please switch to the new package ID above.
Kendo UI Documentation
The following links are Kendo UI online docs(related to this package) and you can refer to.
More Kendo UI configuration can refer to here
| Product | Versions 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard1.6 is compatible. netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .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 | tizen30 was computed. 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. |
-
.NETStandard 1.6
- Microsoft.CSharp (>= 4.7.0)
- NETStandard.Library (>= 1.6.1)
- System.AppDomain (>= 2.0.11)
- System.Linq.Dynamic.Core (>= 1.6.0)
- System.Runtime.Serialization.Primitives (>= 4.3.0)
-
.NETStandard 2.0
- Microsoft.CSharp (>= 4.7.0)
- System.Linq.Dynamic.Core (>= 1.6.0)
-
.NETStandard 2.1
- Microsoft.CSharp (>= 4.7.0)
- System.Linq.Dynamic.Core (>= 1.6.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on KendoNET.DynamicLinq:
| Package | Downloads |
|---|---|
|
Axum.Common
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
1. Add `IgnoreCase` option to `Filter` for case-insensitive string filtering.
2. Document that this package was previously published as Kendo.DynamicLinqCore and was renamed due to a trademark concern.
Full changelog: https://github.com/linmasaki/KendoNET.DynamicLinq/blob/master/CHANGELOG.md