KendoNET.DynamicLinq 透過 Dynamic Linq for .Net Core App(1.x ~ 3.x) 實作伺服器分頁、過濾、排序、分組和聚合到 Kendo UI。
沒有任何
您必須將自訂ObjectToInferredTypesConverter
新增至JsonSerializerOptions
,因為System.Text.Json
現在沒有將推斷類型反序列化為物件屬性,請參閱範例程式碼和參考。
將 KendoNET.DynamicLinq NuGet 套件加入您的專案中。
配置您的 Kendo 資料來源以將其選項作為 JSON 發送。
parameterMap: function(options, type) {return JSON.stringify(options);}
配置資料來源的schema
。
模式:{資料:“資料”,總計:“總計”,聚合:“聚合”,群組:“群組”,錯誤:“錯誤”}
完成的程式碼如下所示。
.....其他劍道網格程式碼.....dataSource: {schema:{data: "Data",total: "Total",aggregates: "Aggregates",groups: "Groups",errors: "Errors" , ...},transport: {read: {url: '您的讀取網址',dataType: 'json',contentType: 'application/json; charset=utf-8',type: 'POST'},create: {url: '您建立的 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); // 您的錯誤訊息e.sender.cancelChanges();},pageSize: 20,serverPaging: true,serverFiltering: true,serverSorting: true,...}.....其他劍道網格程式碼.... .
匯入 KendoNET.DynamicLinq 命名空間。
使用ToDataSourceResult
擴充方法來套用分頁、排序、篩選、分組和聚合。
使用 KendoNET.DynamicLinq[WebMethod]public static DataSourceResult Products(int take, intskip, IEnumerable<Sort> 排序, Filter 過濾器, IEnumerable<Aggregator> 聚合, IEnumerable<Group> groups){using ( Northwind) = new. {return Northwind.Products .OrderBy(p => p.ProductID) // EF 要求分頁排序.Select(p => new ProductViewModel // 使用視圖模型以避免將內部實體框架屬性序列化為JSON { ProductID = p. ProductID、ProductName = p.ProductName、UnitPrice = p.UnitPrice、UnitsInStock = p.UnitsInStock、Discontinued = p.Discontinued }) .ToDataSourceResult(取得、跳過、排序、篩選、聚合、群組);}}
或來自 Kendo UI 請求
using KendoNET.DynamicLinq[HttpPost]public IActionResult Products([FromBody] DataSourceRequest requestModel){using (var Northwind = new Northwind()){return Northwind.Products .Select(p => new ProductViewModel // 使用內部視圖模型避免序列化內部視圖模型避免序列化內部視圖模型避免序列化內部視圖模型避免序列化內部視圖模型避免序列化內部視圖模型避免序列化。實體框架屬性為JSON { ProductID = p.ProductID, ProductName = p.ProductName, UnitPrice = p.UnitPrice, UnitsInStock = p.UnitsInStock, Discontinued = p.Discontinued }) .ToDataResult(requestl.Make, re Sort, requestModel.Filter, requestModel.Aggregate, requestModel.Group);}}
當啟用伺服器端可過濾選項並套用包含DateTime
類型列的過濾條件的查詢時,EntityFramework Core 將引發異常System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting date and/or time from character string
。這個錯誤是由某些舊 EntityFramework Core 版本中的已知問題引起的。解決方法是將datetime
值新增至 DbContext 中的相關欄位。例如
公共類別 MyContext : DbContext{protected override void OnModelCreating(ModelBuilder modelBuilder){.........modelBuilder.Entity<Member>().Property(x => x.UpdateTime).HasColumnType("datetime") ; ........................}}
開啟命令列控制台
切換到專案根目錄(srcKendoNET.DynamicLinq)。
運行“dotnet 恢復”
運行“dotnet pack --configuration Release”
新增<repository type="git" url="https://github.com/linmasaki/KendoNET.DynamicLinq.git" />
打包 nupkg 的元數據,以在 Nuget 上顯示儲存庫 URL
KendoNET.DynamicLinq 是對 Ali Sarkis 的 Kendo.DynamicLinq 的引用。
以下連結是Kendo UI線上文件(與此包相關),您可以參考。
Kendo UI 網格
劍道資料來源
更多Kendo UI配置可以參考這裡