CommonCRUDServiceTEntity, TKey, TInput, TFilterParseFilterItemValue Method

解析指定属性和它的值,以及值中可能包含的比较运算符。

Definition

Namespace: QuickAdmin.Service.CRUD
Assembly: QuickAdmin.Net (in QuickAdmin.Net.dll) Version: 2.0.13
C#
protected virtual Tuple<ComparisonOperator?, string, object, PropertyInfo> ParseFilterItemValue(
	string propertyName,
	string propertyValue,
	bool tryParseOperator
)

Parameters

propertyName  string
属性名称。
propertyValue  string
表示属性值的字符串。可能以比较运算符打头,如 ">=10"
tryParseOperator  bool
指示是否解析比较运算符。

Return Value

TupleComparisonOperator?, string, object, PropertyInfo
一个四元组,其各值为:
  • Item1 – 解析得到的比较运算符,null 表示未解析到运算符。
  • Item2 – 从 propertyValue 里移除了比较运算符前缀的字符串值。
  • Item3 – 与 propertyValue 字符串等效的,该属性的真正类型的值。
  • Item4 – 该属性的 PropertyInfo
解析失败将返回 null

tryParseOperatortrue 且解析成功时,有以下特殊情况:
  • propertyValue 直接是 "=""=="Item1 将为 IsNull
  • propertyValue 直接是 "!=""<>"Item1 将为 IsNotNull
  • 对于 string 类型属性:
    • propertyValue"abc" (即不含比较运算符),Item1 将为 Contains, 最终产生的查询条件语句将为 "a.colName like '%abc%'"
    • propertyValue"=abc""==abc"Item1 将为 EqualTo, 最终产生的查询条件语句将为 "a.colName = 'abc'"
    • propertyValue"!=abc"Item1 将为 NotEqualTo, 最终产生的查询条件语句将为 "a.colName <> 'abc'"
    • propertyValue"<>abc"Item1 将为 NotContains, 最终产生的查询条件语句将为 "a.colName not like '%abc%'"
TreatAsteriskInFilterValueAsStartsOrEndsWithOperatortrue,对于 string 类型属性还有以下解析:
  • propertyValue"*abc"Item1 将为 EndsWith,最终产生的查询条件语句将为 "a.colName like '%abc'"
  • propertyValue"!*abc"Item1 将为 NotEndsWith,最终产生的查询条件语句将为 "a.colName not like '%abc'"
  • propertyValue"!abc*"Item1 将为 NotStartsWith,最终产生的查询条件语句将为 "a.colName not like 'abc%'"
  • propertyValue"abc*"Item1 将为 StartsWith,最终产生的查询条件语句将为 "a.colName like 'abc%'"
  • propertyValue 直接是 "*""!*"Item1 将为 ContainsItem2 同为 "*""!*" , 最终产生的查询条件语句将为 "a.colName like '%*%'""a.colName like '%!*%'"

Remarks

此方法用来解析用户输入的、可能以比较运算符打头的过滤条件值,例如 "10""=10""==10" 均表示等于 10,">=10" 表示大于等于 10,"==" 则表示 "is null" 等等。

tryParseOperatorfalse,将不会去解析比较运算符,返回元组的 Item1 始终为 nullItem2 同于 propertyValue

以下情况将解析失败:
  • 类型 TEntity 里没有名称为 propertyName 的公共属性。属性的查找是区分大小写的。
  • 属性类型不支持比较(不是字符串/数值/枚举/日期时间等类型)。
  • 属性类型与过滤值不匹配,例如查询数值类型字段,值却为非数值字符串。
  • 属性类型与比较运算符不匹配。

See Also