Skip to content

查询表达式过滤

方式一:构建过滤表达式

c#
[HttpGet("expression")]
public async Task<object> TestFilterExpression(string functionName, int shopId)
{
    var query = _basicEmployeeFunctionService.Entities
        .BuildFilterExpression(nameof(BasicEmployeeFunction.FunctionName), functionName)
        .BuildFilterExpression(nameof(BasicEmployeeFunction.ShopId), shopId);

    return query.ToList();
}

方式二:构建表达式工厂

c#
[HttpGet("expression2")]
public async Task<object> TestFilterExpression2()
{
    var factory = FilterExpressionFactory<BasicEmployeeFunction>.Create()
        .Build(nameof(BasicEmployeeFunction.FunctionName), "小程序")
        .Build(nameof(BasicEmployeeFunction.ShopId), 3157);

    var query = _basicEmployeeFunctionService.Entities.Where(factory.ToLambdaExpression());

    return query.ToList();
}

方式三:构建表达式对象

c#
[HttpGet("expression3")]
public async Task<object> TestFilterExpression3([FromQuery] TestExpressionInput input)
{
    var factory = FilterExpressionFactory<BasicEmployeeFunction>.Create().Build(input);

    var query = _basicEmployeeFunctionService.Entities.Where(factory.ToLambdaExpression());

    return query.ToPageCallResult(input.Page - 1, input.Limit);
}

// 或者
[HttpGet("list2")]
public async Task<PageCallResult<SysConditionBase>> GetListAsync([FromQuery] SysConditionListInput input) =>
    await _sysConditionService.GetDefaultQuery()
        .BuildFilterExpression(input)
        .ToPageCallResultAsync(input.Page - 1, input.Limit);

// input定义,内含查询规则
public class TestExpressionInput : PageQueryInput
{
	// 查询字段,并携带规则
    [FilterField(MatchRules = MatchRules.Like)]
    public string FunctionName { get; set; } = string.Empty;

	// 普通查询字段(不定义属性时默认为查询字段)
    public int? ChainId { get; set; }

	// 普通查询字段
    [FilterField]
    public int? ShopId { get; set; }

	// 不映射为查询字段
    [NotFilterField]
    public int XXXX { get; set; }
}

条件配置

input定义查询规则,例如:

c#
    /// <summary>
    /// 获取数据归档实例
    /// </summary>
    public class GetDataArchivingInstancesInput : PageQueryInput
    {
        /// <summary>
        /// 
        /// </summary>
        public GetDataArchivingInstancesInput()
        {
            SortField = nameof(DataArchivingInstance.CreateTime);
            SortType = "desc";
        }

        /// <summary>
        /// 连接名
        /// </summary>
        [FilterField(MatchRules = MatchRules.Like)]
        public string? ConnectionName { get; set; }

        /// <summary>
        /// 数据名
        /// </summary>
        [FilterField(MatchRules = MatchRules.Like)]
        public string? DatabaseName { get; set; }
        
        /// <summary>
        /// 最小创建时间
        /// </summary>
        [FilterField(MatchRules = MatchRules.Ge)]
        public DateTime? MinCreateTime { get; set; }
        
        /// <summary>
        /// 最小创建时间
        /// </summary>
        [FilterField(MatchRules = MatchRules.Le)]
        public DateTime? MaxCreateTime { get; set; }
    }

模糊

c#
[FilterField(MatchRules = MatchRules.Like)]

等于

c#
[FilterField(MatchRules = MatchRules.Eq)]

大于等于

c#
[FilterField(MatchRules = MatchRules.Ge)]

小于等于

c#
[FilterField(MatchRules = MatchRules.Le)]

大于

c#
[FilterField(MatchRules = MatchRules.Gt)]

小于

c#
[FilterField(MatchRules = MatchRules.Lt)]

不等于

c#
[FilterField(MatchRules = MatchRules.Nq)]

以...开头

c#
[FilterField(MatchRules = MatchRules.StartsWith)]

以...结束

c#
[FilterField(MatchRules = MatchRules.EndsWith)]

包含

c#
[FilterField(MatchRules = MatchRules.In)]

广州宝点数字化科技