2016-04-01 62 views
0

我正在使用DataTables odata插件启动我的html表。当搜索我送过滤器属性,它看起来像这样:

$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' 

然而,结果我得到了第1滤光片用的indexOf匹配功能绝对一切。例如:

{ 
ClientAlias:Object{Name="weentertain"} 
Manager: 
Object { Id="55"} 
} 

其中Manager.Id甚至没有接近我要求的过滤器。 我的问题是,以前的过滤器是覆盖最后一个,还是我以错误的方式请求?

回答

0

首先,请注意,您提供的示例是对名为Manager_Id的属性进行筛选,但您的示例结果中不会显示此类属性。您是否想要过滤Manager/Id

您看到的结果归因于operator precedenceand运营商的优先级高于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' 
+0

这工作。包含实际工作得更好 –