KendoNET.DynamicLinq implements server paging, filtering, sorting, grouping, and aggregating to Kendo UI via Dynamic Linq for .Net Core App(1.x ~ 3.x).
None
You must add custom ObjectToInferredTypesConverter
to your JsonSerializerOptions
since System.Text.Json
didn't deserialize inferred type to object properties now, see
the sample code
and reference.
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 informatione.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);}}
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");..........}}
Open command line console
Switch to project root directory(srcKendoNET.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
KendoNET.DynamicLinq is a reference to Ali Sarkis's Kendo.DynamicLinq.
The following links are Kendo UI online docs(related to this package) and you can refer to.
Kendo UI Grid
Kendo DataSource
More Kendo UI configuration can refer to here