DynamicPredicateBuilder 1.0.0
See the version list below for details.
dotnet add package DynamicPredicateBuilder --version 1.0.0
NuGet\Install-Package DynamicPredicateBuilder -Version 1.0.0
<PackageReference Include="DynamicPredicateBuilder" Version="1.0.0" />
<PackageVersion Include="DynamicPredicateBuilder" Version="1.0.0" />
<PackageReference Include="DynamicPredicateBuilder" />
paket add DynamicPredicateBuilder --version 1.0.0
#r "nuget: DynamicPredicateBuilder, 1.0.0"
#:package DynamicPredicateBuilder@1.0.0
#addin nuget:?package=DynamicPredicateBuilder&version=1.0.0
#tool nuget:?package=DynamicPredicateBuilder&version=1.0.0
DynamicPredicateBuilder 使用說明
簡介
DynamicPredicateBuilder 提供一套靈活的查詢條件組合機制,支援欄位查詢權限控管、動態過濾、排序與分頁,適用於 .NET 8 專案。
1. 欄位查詢權限設定
方式一:程式碼指定可查詢欄位
於 Controller 設定 AllowedFields
,僅允許指定欄位查詢:
[HttpPost("people")]
public IActionResult QueryPeople([FromBody] QueryRequest request)
{
var options = new FilterOptions
{
AllowedFields = new HashSet<string> { "Name", "Age", "Address.City" } // 允許查的欄位
};
var filterGroup = FilterGroupFactory.FromDictionary(request.Filter);
var predicate = FilterBuilder.Build<Person>(filterGroup, options);
var query = _db.People.Where(predicate)
.ApplySort(request.Sort);
var totalCount = query.Count();
var result = query.Skip((request.Page - 1) * request.PageSize)
.Take(request.PageSize)
.ToList();
return Ok(new QueryResult<Person>
{
TotalCount = totalCount,
Items = result
});
}
方式二:使用 Attribute 標註可查詢欄位
於 Model 屬性加上 [Queryable]
,自動取得可查詢欄位:
Model 使用方式public class Person
{ [Queryable] public string Name { get; set; }
[Queryable]
public int Age { get; set; }
public string Password { get; set; } // 沒標,不能查
[Queryable]
public Address Address { get; set; }
}
public class Address { [Queryable] public string City { get; set; }
public string SecretNote { get; set; } // 沒標,不能查
}
Controller 使用方式[HttpPost("people")]
public IActionResult QueryPeople([FromBody] QueryRequest request) { var allowedFields = QueryableFieldHelper.GetQueryableFields<Person>();
var options = new FilterOptions
{
AllowedFields = allowedFields
};
var filterGroup = FilterGroupFactory.FromDictionary(request.Filter);
var predicate = FilterBuilder.Build<Person>(filterGroup, options);
var query = _db.People.Where(predicate)
.ApplySort(request.Sort);
var totalCount = query.Count();
var result = query.Skip((request.Page - 1) * request.PageSize)
.Take(request.PageSize)
.ToList();
return Ok(new QueryResult<Person>
{
TotalCount = totalCount,
Items = result
});
}
取得可查詢欄位QueryableFieldHelper.GetQueryableFields<Person>();
2. API 使用方式
Request Example{
"Filter": { "LogicalOperator": "And", "Rules": [ { "Property": "Age", "Operator": "GreaterThanOrEqual", "Value": 25 }, { "Property": "Address.City", "Operator": "Equal", "Value": "Taipei" } ] }, "Sort": [ { "Property": "Name", "Descending": false }, { "Property": "Age", "Descending": true } ], "Page": 1, "PageSize": 5 }
Response Example{
"totalCount": 45, "items": [ { "name": "Alice", "age": 30, "address": { "city": "Taipei" } }, ... ] }
3. API 範例
Request 範例
Response 範例
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. 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 is compatible. 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 is compatible. 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. |
-
net7.0
- Newtonsoft.Json (>= 13.0.3)
-
net8.0
- Newtonsoft.Json (>= 13.0.3)
-
net9.0
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.