2016-04-01 93 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

這工作。包含實際工作得更好 –