在OData标准中,如何处理带有多个无括号逻辑运算符的$filter



例如,我尝试了带有查询的官方示例:

https://services.odata.org/TripPinRESTierService/(S(q1skedyvlv22yjp5fcce2gg2((/人$filter=用户名%20eq%27%russellwyte%27%20或%20UserName%20eq%20%27scottetchum%27%20和%20UserName:20eq%20%27ronaldmundy%27

https://services.odata.org/TripPinRESTierService/(S(q1skedyvlv22yjp5fcce2gg2((/人$filter=用户名%20eq%27%russellwyte%27%20和%20UserName%20eq%20%27scottetchum%27%20或%20UserName:20eq%20%27ronaldmundy%27

事实证明,它不是从左到右,AND运算符是在OR运算符之前处理的。我想知道这是否是规则。

我搜索了文档:http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752358

它指的是odata abnf。

但在abnf我只找到

"并且Expr=RWS";以及";RWS boolCommonExpr";

,我无法理解。。。

逻辑中的AND比OR有更高的优先级,就像乘法在数学中比加法有更高优先级一样。无论是在数学还是逻辑中,表达式都不是从左到右计算的。它们是根据特定的优先级规则进行评估的。

大多数(如果不是全部的话(编程语言都遵循逻辑优先级规则。

最新更新