如何在Kendo中构建含OR与AND逻辑的复杂数据筛选器?
实现Kendo复杂筛选条件的代码修改方案
问题分析
原代码存在两个关键问题,无法实现需求中的筛选逻辑:
- 外层筛选逻辑误用
"or",会导致只要满足状态为Pending/Rejected、或DueDate符合条件任意一项就返回数据,不符合「状态满足其一且日期符合」的要求 DueDate的Value错误赋值为TaskGroupStatus.Pending的枚举值,完全不符合日期筛选的需求
修改后的代码
DataQueryParameters queryParameters = new DataQueryParameters(); queryParameters.Filter = new Filter() { // 外层逻辑为AND:状态条件 和 日期条件必须同时满足 Logic = "and", Filters = new List<Filter>() { // 第一个子筛选:状态为Pending或Rejected(OR逻辑) new Filter() { Logic = "or", Filters = new List<Filter>() { new Filter() { Field = "TaskGroupStatus", Operator = "eq", Value = (int)TaskGroupStatus.Pending }, new Filter() { Field = "TaskGroupStatus", Operator = "eq", Value = (int)TaskGroupStatus.Rejected } } }, // 第二个子筛选:DueDate大于等于当前日期 new Filter() { Field = "DueDate", Operator = "gte", Value = DateTime.Now.Date // 若需要包含时间维度,可直接使用DateTime.Now,根据业务需求调整 } } };
逻辑说明
- 外层
Filter使用"and"逻辑,确保状态条件组和日期条件必须同时成立 - 状态条件组通过内层
"or"逻辑,实现「TaskGroupStatus为Pending 或 Rejected」的判断 DueDate的Value替换为当前日期(DateTime.Now.Date仅保留日期部分,DateTime.Now包含时间),匹配「大于等于当前日期」的需求
内容的提问来源于stack exchange,提问作者AbdulAleem
相关产品推荐
相关产品推荐

