Skip to content

动态条件

在使用 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);