查询操作符说明
在系统中查询数据时,使用 DynamicFilter 对象构建查询条件。DynamicFilter 支持单条件和嵌套的复杂条件(通过逻辑运算符组合)。
模型定义
public class DynamicFilter
{
/// <summary>字段名</summary>
public string Field { get; set; }
/// <summary>操作符</summary>
public FilterOperator Operator { get; set; }
/// <summary>值</summary>
public object Value { get; set; }
/// <summary>值的类型(可选,默认自动推断)</summary>
public FilterValueType ValueType { get; set; } = FilterValueType.Default;
/// <summary>子条件的逻辑关系(And / Or)</summary>
public FilterLogic Logic { get; set; }
/// <summary>子条件列表(与当前 Logic 组合)</summary>
public List<DynamicFilter> Filters { get; set; }
}
简单条件
单条查询条件,直 接设置 Field、Operator、Value:
{
"Field": "studentid",
"Operator": "Eq",
"Value": "2025"
}
C# 代码:
var filter = new DynamicFilter
{
Field = "studentid",
Operator = FilterOperator.Eq,
Value = "2025"
};
复杂条件
通过 Logic + Filters 构建多条件的与/或组合。Filters 中的每个元素都是 DynamicFilter,支持递归嵌套:
{
"Logic": "And",
"Filters": [
{
"Field": "studentid",
"Operator": "Eq",
"Value": "2025"
},
{
"Field": "name",
"Operator": "Eq",
"Value": "张三"
},
{
"Logic": "Or",
"Filters": [
{
"Field": "status",
"Operator": "Ct",
"Value": "active"
},
{
"Field": "status",
"Operator": "Ct",
"Value": "pending"
}
]
},
{
"Logic": "And",
"Filters": [
{
"Field": "score",
"Operator": "Gte",
"Value": 1
},
{
"Field": "score",
"Operator": "Lte",
"Value": 2
}
]
}
]
}
C# 代码:
var filter = new DynamicFilter
{
Logic = FilterLogic.And,
Filters = new List<DynamicFilter>
{
new() { Field = "studentid", Operator = FilterOperator.Eq, Value = "2025" },
new() { Field = "name", Operator = FilterOperator.Eq, Value = "张三" },
new DynamicFilter
{
Logic = FilterLogic.Or,
Filters = new List<DynamicFilter>
{
new() { Field = "status", Operator = FilterOperator.Ct, Value = "active" },
new() { Field = "status", Operator = FilterOperator.Ct, Value = "pending" }
}
},
new DynamicFilter
{
Logic = FilterLogic.And,
Filters = new List<DynamicFilter>
{
new() { Field = "score", Operator = FilterOperator.Gte, Value = 1 },
new() { Field = "score", Operator = FilterOperator.Lte, Value = 2 }
}
}
}
};
逻辑操作符
条件之间的逻辑关系:
| 值 | 说明 |
|---|---|
| And | 子条件之 间为 与 关系(全部满足) |
| Or | 子条件之间为 或 关系(满足任一即可) |
对应枚举:FilterLogic.And / FilterLogic.Or
查询操作符
| 操作符 | 枚举值 | 说明 | 适用类型 | Value 格式 |
|---|---|---|---|---|
| Eq | Eq | 等于 | 字符、日期、数字、Guid | 直接值 |
| Ne | Ne | 不等于 | 字符、日期、数字、Guid | 直接值 |
| Ct | Ct | 包含(Contains) | 字符 | 字符串 |
| Nct | Nct | 不包含(Not Contains) | 字符 | 字符串 |
| Sw | Sw | 以...开头(Start With) | 字符 | 字符串 |
| Ew | Ew | 以...结尾(End With) | 字符 | 字符串 |
| Nsw | Nsw | 不以...开头(Not Start With) | 字符 | 字符串 |
| New | New | 不以...结尾(Not End With) | 字符 | 字符串 |
| Gt | Gt | 大于(Greater Than) | 数字、日期 | 数字 / 日期值 |
| Gte | Gte | 大于等于 | 数字、日期 | 数字 / 日期值 |
| Lt | Lt | 小于(Less Than) | 数字、日期 | 数字 / 日期值 |
| Lte | Lte | 小于等于 | 数字、日期 | 数字 / 日期值 |
| In | In | 在列表中(IN) | 任意 | 逗号分隔字符串或数组 |
| Nin | Nin | 不在列表中(NOT IN) | 任意 | 逗号分隔字符串或数组 |
| Act | Act | 数组包含(Array Contains) | 数组字段 | 逗号分隔字符串 |
值类型(ValueType)
可选属性,用于明确指定值的类型。通常不需要手动设置,系统会根据 Value 自动推断:
| 值 | 说明 |
|---|---|
| Default | 默认,由系统自动推断 |
| String | 字符串类型 |
| Number | 数字类型 |
| DateTime | 日期时间类型 |
| Boolean | 布尔类型 |
| Guid | GUID 类型 |
对应枚举:FilterValueType.Default / .String / .Number / .DateTime / .Boolean / .Guid
FilterBuilder 辅助类
为方便快速构建 filter,平台提供了 FilterBuilder 类:
逻辑组合
// And 条件
var filter = FilterBuilder.And(
FilterBuilder.Eq("appId", "1123"),
FilterBuilder.Ne("name", "test")
);
// Or 条件
var filter = FilterBuilder.Or(
FilterBuilder.Ct("title", "重要"),
FilterBuilder.Ct("title", "紧急")
);
// 嵌套组合
var filter = FilterBuilder.And(
FilterBuilder.Gte("amount", 1000),
FilterBuilder.Or(
FilterBuilder.Eq("status", "Approved"),
FilterBuilder.Eq("status", "Pending")
)
);
可用方法
| 方法 | 说明 | 对应操作符 |
|---|---|---|
FilterBuilder.And(params filters) | 构建 And 逻辑条件 | — |
FilterBuilder.Or(params filters) | 构建 Or 逻辑条件 | — |
FilterBuilder.Eq(field, value) | 等于 | Eq |
FilterBuilder.Ne(field, value) | 不等于 | Ne |
FilterBuilder.Gt(field, value) | 大于 | Gt |
FilterBuilder.Gte(field, value) | 大于等于 | Gte |
FilterBuilder.Lt(field, value) | 小于 | Lt |
FilterBuilder.Lte(field, value) | 小于等于 | Lte |
FilterBuilder.Ct(field, value) | 包含 | Ct |
FilterBuilder.In(field, value) | 在列表中 | In |
相关文档
- ObjectData 使用说明 — 数据对象模型说明
- DbContext — 数据库操作 — 使用 DynamicFilter 查询数据的示例