动态条件
在使用 ORM 方法时,经常遇到需要动态组装查询条件的情况。尤其是复杂的多条件查询功能,需要根据用户输入决定使用哪些条件。 框架提供了动态条件生成器 OptionalExpressionBuilder,可以方便地组合各种查询条件。
方法列表
生成器支持下列方法。
Where
- 说明:添加固定条件
- 参数:
- expression 条件表达式
- 返回:生成器对象
WhereIf
- 说明:当传入参数为 true 时,添加指定条件
- 参数:
- enable 是否启用
- expression 条件表达式
- 返回:生成器对象
WhereIfNotNull
- 说明:当传入参数不为 null 时,添加指定条件
- 参数:
- object 判断对象
- expression 条件表达式
- 返回:生成器对象
WhereIfNotNullOrEmpty
- 说明:当传入参数不为 null 且不为空字符串时,添加指定条件
- 参数:
- object 判断对象
- expression 条件表达式
- 返回:生成器对象
Build
- 说明:构建条件表达式
- 参数:无
- 返回:表达式
示例
由于 Where* 方法返回了生成器对象本身,因此可以链式调用。下面给出一个使用示例。
csharp
var where = new OptionalExpressionBuilder<Func<WorkSearchBo, bool>>()
.Where(t => t.UserId == me.Id)
.WhereIf(dto.TimeType == "create", t => t.Work.CreateTime >= dto.CreateTimeStart && t.Work.CreateTime <= dto.CreateTimeEnd)
.WhereIfNotNullOrEmpty(dto.BizId, t => t.Work.BizId == dto.BizId)
.WhereIfNotNull(dto.WorkState, t => t.Work.State == dto.WorkState.Value)
.WhereIfNotNullOrEmpty(dto.WorkCreator, t => t.Work.CreateUser == dto.WorkCreator)
.WhereIfNotNullOrEmpty(dto.WorkflowCategory, t => t.Workflow.Category == dto.WorkflowCategory)
.WhereIfNotNullOrEmpty(dto.WorkflowCode, t => t.Workflow.Code == dto.WorkflowCode)
.WhereIfNotNullOrEmpty(dto.WorkTitle, t => t.Work.Title.Contains(dto.WorkTitle))
.WhereIf(!isDefautSearcher, bizWhere)
.Build();
var data = GetListPage(where, pageInfo);