QueryKit 开源项目教程
1. 项目介绍
QueryKit 是一个 .NET 库,旨在通过提供流畅且直观的语法来简化数据查询。它主要用于解析外部过滤和排序输入,以提供更细粒度的数据消费(例如,React UI 提供过滤控件以过滤工作列表)。QueryKit 的设计灵感来自 Sieve,但在某些方面有所不同。
2. 项目快速启动
安装
首先,通过 NuGet 安装 QueryKit:
dotnet add package QueryKit
基本使用
假设我们有一个名为 People
的 DbSet
,我们可以使用 QueryKit 来应用过滤器:
var filterInput = """FirstName == "Jane" && Age > 10""";
var people = _dbContext.People.ApplyQueryKitFilter(filterInput).ToList();
QueryKit 会自动将输入字符串转换为表达式。
自定义属性名称
你还可以自定义属性名称:
var filterInput = """first == "Jane" && Age > 10""";
var config = new QueryKitConfiguration(config => {
config.Property<Person>(x => x.FirstName).HasQueryName("first");
});
var people = _dbContext.People.ApplyQueryKitFilter(filterInput, config).ToList();
排序
排序功能同样简单:
var filterInput = """first == "Jane" && Age > 10""";
var config = new QueryKitConfiguration(config => {
config.Property<Person>(x => x.FirstName).HasQueryName("first");
});
var people = _dbContext.People.ApplyQueryKitFilter(filterInput, config)
.ApplyQueryKitSort("first, Age desc", config)
.ToList();
3. 应用案例和最佳实践
过滤器使用
QueryKit 支持多种逻辑和比较运算符,例如:
var input = """FirstName == "Jane" && Age < 10""";
var input = """FirstName == "Jane" || FirstName == "John" """;
复杂示例
以下是一个复杂的过滤器示例:
var input = """(Title == "lamb" && ((Age >= 25 && Rating < 4.5) || (SpecificDate <= "2022-07-01T00:00:03Z" && Time == "00:00:03")) && (Favorite == true || Email.Value _= "hello@gmail.com"))""";
过滤集合
QueryKit 还支持对集合进行过滤:
var input = """"Ingredients.Name == "salt" """";
过滤枚举
你可以使用枚举的整数值进行过滤:
var input = "BirthMonth == 1";
4. 典型生态项目
QueryKit 可以与其他 .NET 生态系统项目无缝集成,例如:
- Entity Framework Core: 用于数据库访问和查询。
- ASP.NET Core: 用于构建 Web API 和应用。
- Blazor: 用于构建交互式 Web 应用。
通过这些集成,QueryKit 可以帮助开发者更高效地处理数据查询和过滤需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考