KendoNET.DynamicLinq は、.Net Core アプリ (1.x ~ 3.x) の Dynamic Linq を介して、サーバーのページング、フィルタリング、ソート、グループ化、Kendo UI への集約を実装します。
なし
System.Text.Json推論された型をオブジェクト プロパティに逆シリアル化していないため、カスタムObjectToInferredTypesConverterをJsonSerializerOptionsに追加する必要があります。サンプル コードとリファレンスを参照してください。
KendoNET.DynamicLinq NuGet パッケージをプロジェクトに追加します。
オプションを JSON として送信するように Kendo DataSource を設定します。
パラメータマップ: function(options, type) {return JSON.stringify(options);} dataSourceのschemaを設定します。
スキーマ: {データ: "データ"、合計: "合計"、集計: "集計"、グループ: "グループ"、エラー: "エラー"}完成したコードは以下のようになります。
..... その他の剣道グリッド コード .....dataSource: {schema:{data: "Data",total: "Total",aggregates: "Aggregates",groups: "Groups",errors: "Errors", ...},transport: {read: {url: 'あなたの読み取り 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 (データ, オペレーション) {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拡張メソッドを使用して、ページング、並べ替え、フィルタリング、グループ化、集計を適用します。
using KendoNET.DynamicLinq[WebMethod]public static DataSourceResult Products(int take, intskip, IEnumerable<Sort> sort, Filter フィルター, IEnumerable<Aggregator> 集計, IEnumerable<Group> groups){using (var Northwind = new Northwind()) {return Northwind.Products .OrderBy(p => p.ProductID) // EF ではページングの順序付けが必要です.Select(p => new ProductViewModel // ビュー モデルを使用して、Entity Framework の内部プロパティを JSON としてシリアル化することを回避します { ProductID = p.ProductID, ProductName = p.ProductName, UnitPrice = p.UnitPrice, UnitsInStock = p.UnitsInStock, Discontinued = p.Discontinued }) .ToDataSourceResult(take、skip、sort、filter、aggregates、groups);}}または 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 としての内部 Entity Framework プロパティ { 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);}}サーバー側のフィルタリング可能なオプションが有効で、 DateTimeタイプの列を含むフィルタ条件を含むクエリを適用すると、EntityFramework Core は例外System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting date and/or time from character stringスローします。 System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting date and/or time from character string 。このエラーは、一部の古い EntityFramework Core バージョンの既知の問題によって発生します。回避策は、DbContext の関連列にdatetime値を追加することです。例えば
public class MyContext : DbContext{protected override void OnModelCreating(ModelBuilder modelBuilder){..........modelBuilder.Entity<Member>().Property(x => x.UpdateTime).HasColumnType("datetime") ;..........}}コマンドラインコンソールを開く
プロジェクトのルート ディレクトリ (srcKendoNET.DynamicLinq) に切り替えます。
「ドットネット復元」を実行します
「dotnet Pack --configuration Release」を実行します。
Nuget でリポジトリ URL を表示するために、nupkg のパッケージ メタデータに<repository type="git" url="https://github.com/linmasaki/KendoNET.DynamicLinq.git" />を追加します。
KendoNET.DynamicLinq は、Ali Sarkis の Kendo.DynamicLinq への参照です。
以下のリンクは Kendo UI のオンライン ドキュメント (このパッケージに関連) であり、参照できます。
剣道 UI グリッド
剣道データソース
Kendo UI 設定の詳細については、ここを参照してください。