namespace Dpz.Core.Entity.Base.ExpressTreeQuery;

/// <summary>
/// 定义查询过滤条件的枚举
/// 用于指定在生成表达式树时,如何验证和处理请求参数的值
/// </summary>
public enum FilterCondition
{
    /// <summary>
    /// 验证值不为 null
    /// 适用于所有可空类型
    /// </summary>
    NotNull,

    /// <summary>
    /// 验证字符串不为 null 且不为空字符串
    /// 仅适用于 <see cref="string"/> 类型
    /// 等同于  <![CDATA[value != null && value != ""]]>
    /// </summary>
    NotNullOrEmpty,

    /// <summary>
    /// 验证字符串不为 null 且不为空字符串且不为纯空白字符
    /// 仅适用于 <see cref="string"/> 类型
    /// 等同于 <![CDATA[value != null && value.Trim() != ""]]>
    /// </summary>
    NotNullOrWhiteSpace,

    /// <summary>
    /// 验证集合不为 null 且包含至少一个元素,用于 IN 查询(左侧包含关系)
    /// 适用于实现了 <see cref="System.Collections.IEnumerable"/> 接口的类型
    /// 配合 <see cref="Comparison.Contains"/> 使用时,生成:<![CDATA[request.Collection.Contains(entity.Field)]]>
    /// 意义:请求参数是集合,实体字段是单值,检查实体字段值是否在请求集合中
    /// 等同于 <![CDATA[value != null && value.Count > 0]]>
    /// </summary>
    LeftAny,

    /// <summary>
    /// 验证数组不为 null 且包含至少一个元素,用于包含查询(右侧包含关系)
    /// 适用于 <see cref="System.Array"/> 和集合类型
    /// 配合 <see cref="Comparison.Contains"/> 使用时,生成:<![CDATA[entity.Collection.Contains(conditionValue)]]>
    /// 意义:实体字段是集合,条件值是单值,检查实体集合是否包含指定值
    /// 等同于 <![CDATA[value != null && value.Length > 0]]>
    /// </summary>
    RightAny,

    /// <summary>
    /// 验证值等于指定的比较值
    /// 适用于所有可比较的类型
    /// 等同于 <![CDATA[value == comparisonValue]]>
    /// </summary>
    EqualValue,

    /// <summary>
    /// 验证值不等于指定的比较值
    /// 适用于所有可比较的类型
    /// 等同于 <![CDATA[value != comparisonValue]]>
    /// </summary>
    NotEqualValue,

    /// <summary>
    /// 验证值大于指定的比较值
    /// 适用于实现了 IComparable 接口的类型
    /// 等同于 <![CDATA[value > comparisonValue]]>
    /// </summary>
    GtValue,

    /// <summary>
    /// 验证值小于指定的比较值
    /// 适用于实现了 IComparable 接口的类型
    /// 等同于 <![CDATA[value < comparisonValue]]>
    /// </summary>
    LtValue,

    /// <summary>
    /// 验证值大于或等于指定的比较值
    /// 适用于实现了 IComparable 接口的类型
    /// 等同于 <![CDATA[value >= comparisonValue]]>
    /// </summary>
    GtOrEqualValue,

    /// <summary>
    /// 验证值小于或等于指定的比较值
    /// 适用于实现了 IComparable 接口的类型
    /// 等同于 <![CDATA[value <= comparisonValue]]>
    /// </summary>
    LtOrEqualValue,
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于表达式树查询的枚举定义,属于 Dpz.Core.Entity.Base.ExpressTreeQuery 命名空间。该枚举定义了在动态生成查询表达式时可以使用的各种过滤条件。

主要功能

这个 FilterCondition 枚举主要用于:

  1. 参数验证:在生成表达式树之前验证请求参数的有效性
  2. 条件筛选:定义不同类型的数据应该如何进行条件判断
  3. 表达式生成:为动态查询提供标准化的过滤条件

枚举值分类

空值检查类

  • NotNull:检查值不为 null
  • NotNullOrEmpty:检查字符串不为 null 且不为空
  • NotNullOrWhiteSpace:检查字符串不为 null 且不为空白字符

集合操作类

  • LeftAny:用于 IN 查询,检查集合不为空且有元素
    • 例:request.UserIds.Contains(entity.UserId)
  • RightAny:用于包含查询,检查数组/集合不为空
    • 例:entity.Tags.Contains(searchTag)

比较操作类

  • EqualValue:等于比较 (==)
  • NotEqualValue:不等于比较 (!=)
  • GtValue:大于比较 (>)
  • LtValue:小于比较 (<)
  • GtOrEqualValue:大于等于比较 (>=)
  • LtOrEqualValue:小于等于比较 (<=)

使用场景

这个枚举通常配合属性或方法使用,用于:

// 示例用法(假设)
[QueryFilter(FilterCondition.NotNullOrEmpty)]
public string Name { get; set; }

[QueryFilter(FilterCondition.LeftAny)]
public List<int> CategoryIds { get; set; }

[QueryFilter(FilterCondition.GtOrEqualValue)]
public DateTime? StartDate { get; set; }

通过这种方式,可以在运行时根据这些条件动态生成相应的 LINQ 表达式,实现灵活的查询功能,同时保证参数的有效性验证。

评论加载中...