我正在使用DataTables odata插件来启动我的html表。搜索时我发送的filter属性如下所示:
$filter=
indexof(tolower(ClientAlias/Name), 'wee') gt -1 or indexof(tolower(Product/Name), 'wee') gt -1 or indexof
(tolower(User/UserName), 'wee') gt -1 or indexof(tolower(Manager/FullName), 'wee') gt -1 and Status ne
webapi.Models.ContractStatus'Suspended' and Manager_Id eq '120'
然而,在结果中我绝对得到了与indexof函数匹配的第一个过滤器。例如:
{
ClientAlias:Object{Name="weentertain"}
Manager:
Object { Id="55"}
}
Manager.Id甚至不接近我使用Filter请求的那个。 我的问题是,先前的过滤器是否覆盖了最后一个,或者我是以错误的方式请求它?
答案 0 :(得分:0)
首先,请注意您提供的示例是对名为Manager_Id
的属性进行过滤,但样本结果中不会显示此类属性。您的意思是过滤Manager/Id
吗?
您看到的结果归因于operator precedence。 and
运算符的优先级高于or
。您可以通过使用括号将group子串匹配在一起来覆盖优先级。
最后,您可以使用contains
函数代替indexof
/ eq
组合来简化子字符串匹配。
这是重写的过滤器(插入换行符以便于阅读):
$filter=
(contains(tolower(ClientAlias/Name), 'wee') or
contains(tolower(Product/Name), 'wee') or
contains(tolower(User/UserName), 'wee') or
contains(tolower(Manager/FullName), 'wee')) and
Status ne webapi.Models.ContractStatus'Suspended' and
Manager/Id eq '120'