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

しかし、結果に私は、IndexOfメソッドの機能を備えた最初のフィルタに一致する絶対にすべてを取得。たとえば、次のManager.Id私はフィ​​ルターに要求していたものと似ても似つかない

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

。 私の質問は、前のフィルターは最後のフィルターを上書きするのですか、それとも間違った方法で要求していますか?

答えて

0

最初に、指定した例はManager_Idという名前のプロパティでフィルタリングされていますが、そのようなプロパティはサンプル結果には表示されません。 Manager/Idにフィルタリングすることを意味しましたか?

あなたが見ている結果はoperator precedenceです。 and演算子は、orより高い優先順位を持ちます。優先順位をオーバーライドするには、括弧を使用してgroupに部分文字列を一致させることができます。

最後に、indexof/eqの代わりにcontains関数を使用すると、部分文字列の一致を簡略化できます。働い

$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

は、ここで(読みやすくするために挿入された改行付き)に書き換えフィルタです。実際にうまく機能している –

関連する問題