KendoNET.DynamicLinq
3.1.2
dotnet add package KendoNET.DynamicLinq --version 3.1.2
NuGet\Install-Package KendoNET.DynamicLinq -Version 3.1.2
<PackageReference Include="KendoNET.DynamicLinq" Version="3.1.2" />
paket add KendoNET.DynamicLinq --version 3.1.2
#r "nuget: KendoNET.DynamicLinq, 3.1.2"
// Install KendoNET.DynamicLinq as a Cake Addin #addin nuget:?package=KendoNET.DynamicLinq&version=3.1.2 // Install KendoNET.DynamicLinq as a Cake Tool #tool nuget:?package=KendoNET.DynamicLinq&version=3.1.2
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
ObjectToInferredTypesConverter
to yourJsonSerializerOptions
sinceSystem.Text.Json
didn'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
schema
of 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
ToDataSourceResult
extension 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");
..........
}
}
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. |
.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.2.13)
- System.Runtime.Serialization.Primitives (>= 4.3.0)
-
.NETStandard 2.0
- Microsoft.CSharp (>= 4.7.0)
- System.Linq.Dynamic.Core (>= 1.2.13)
-
.NETStandard 2.1
- Microsoft.CSharp (>= 4.7.0)
- System.Linq.Dynamic.Core (>= 1.2.13)
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.
Version | Downloads | Last updated |
---|---|---|
3.1.2 | 53,590 | 7/13/2022 |
1. Rename this repository.
Full changelog: https://github.com/linmasaki/KendoNET.DynamicLinq/blob/master/CHANGELOG.md