在与我的同事的讨论中,出现了一个问题,即在OData网址过滤器中调用eq true
方法后是否必须添加substringof
:
http://localhost/Collection/WorkItems()?$filter=substringof('crash',Title)
http://localhost/Collection/WorkItems()?$filter=substringof('crash',Title) eq true
现在我正在咨询ABNF for OData revised on 4/27/2012。查看filter
表达式表单,它需要boolCommonExpr
:
filter = "$filter" [ WSP ] "=" [ WSP] boolCommonExpr
boolCommonExpr
列出boolMethodCallExpr
作为其替代方案之一。但是ABNF中没有boolMethodCallExpr
符号的定义!
所以,我猜这是ABNF中的一个错误,并且列出的正确替代方案必须是boolMethodExpr
,而不是boolMethodCallExpr
:
boolMethodExpr = endsWithMethodCallExpr /
startsWithMethodCallExpr /
substringOfMethodCallExpr /
intersectsMethodCallExpr /
anyMethodCallExpr /
allMethodCallExpr
在这种情况下,允许调用substringof
方法在URI中没有eq true
(以及eq true
)。
我的理解是否正确?
答案 0 :(得分:1)
您不需要在URL的末尾加上“eq true”。任何返回布尔值的内置函数都应该足够好。这看起来可能只是ABNF中的一个错字(特别是未定义boolMethodCallExpr)。该特定文档甚至不完整,并且其中包含多个TODO。随着OASIS OData标准化的结合,应该有更明确的ABNF。