CommonCRUDServiceTEntity, TKey, TInput, TFilterParseFilterItemValue Method
解析指定属性和它的值,以及值中可能包含的比较运算符。
Namespace: QuickAdmin.Service.CRUDAssembly: QuickAdmin.Net (in QuickAdmin.Net.dll) Version: 2.0.13
protected virtual Tuple<ComparisonOperator?, string, object, PropertyInfo> ParseFilterItemValue(
string propertyName,
string propertyValue,
bool tryParseOperator
)
- propertyName string
- 属性名称。
- propertyValue string
- 表示属性值的字符串。可能以比较运算符打头,如 ">=10"。
- tryParseOperator bool
- 指示是否解析比较运算符。
TupleComparisonOperator?,
string,
object,
PropertyInfo
一个四元组,其各值为:
- Item1 –
解析得到的比较运算符,null 表示未解析到运算符。
- Item2 –
从 propertyValue 里移除了比较运算符前缀的字符串值。
- Item3 –
与 propertyValue 字符串等效的,该属性的真正类型的值。
- Item4 –
该属性的 PropertyInfo。
解析失败将返回
null。
当
tryParseOperator 为
true 且解析成功时,有以下特殊情况:
-
若 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%'"。
若
TreatAsteriskInFilterValueAsStartsOrEndsWithOperator 为
true,对于
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 将为 Contains,Item2 同为 "*" 或 "!*" ,
最终产生的查询条件语句将为 "a.colName like '%*%'" 或 "a.colName like '%!*%'"。
此方法用来解析用户输入的、可能以比较运算符打头的过滤条件值,例如
"10"、
"=10"、
"==10" 均表示等于 10,
">=10" 表示大于等于 10,
"==" 则表示
"is null" 等等。
若
tryParseOperator 为
false,将不会去解析比较运算符,返回元组的
Item1 始终为
null,
Item2 同于
propertyValue。
以下情况将解析失败:
-
类型 TEntity 里没有名称为 propertyName 的公共属性。属性的查找是区分大小写的。
-
属性类型不支持比较(不是字符串/数值/枚举/日期时间等类型)。
-
属性类型与过滤值不匹配,例如查询数值类型字段,值却为非数值字符串。
-
属性类型与比较运算符不匹配。