2014-09-19 49 views
0

我是一個oData新手,並試圖構造$ filter參數,其行爲與「LIKE」sql語句相似。構建「LIKE」WEB API oData選項過濾器

讓我們說名稱文本框中的用戶輸入「ABC」,這相當於「$ filter = name eq'ABC'」。

  1. 用戶輸入「ABC *」,代碼應該產生「name startswith'abc'」。
  2. 用戶輸入「* ABC」,代碼應該產生「名字endswith'abc'」。
  3. 用戶輸入「A * C」,代碼應該產生「名稱startswith'a'並且名稱 以'c'結尾」。
  4. 不錯,如果它也可以做「A * B * C」或更復雜的變化,但不是要求。

現在,我可以寫,可能是這樣的一個小JavaScript方法......(僞只) (如果第一個字符是==「」)? 「blah startswith'ABC'」:「」 +(如果最後一個字符是==「」)? 「blah endswith'ABC'」:「」... etc..or可能是一些正則表達式

但它並不優雅我不確定這是否是正確的方法,是否有任何其他方式來處理與oData的LIKE 。是否可以通過「blah eq」* A * B * C *'「並修改控制器內的選項以強制選項生成」LIKE「?

注:不要求一個實際的代碼,只需用什麼辦法可以工作的想法...

的問候, 邁克

+0

什麼,如果用戶輸入'* A * B * C *'? – 2014-09-19 23:44:46

+0

是的,我想過,但我們必須考慮oData選項和LINQ的限制。我認爲「A * B * C」是現實世界商業應用中的邊緣案例,我可能會不支持它。 – 2014-09-20 01:24:55

+0

任何人都可以解釋爲什麼這是下降到-1? – 2014-09-20 01:32:23

回答

1

OData的「發明」,所以你不會需要重新發明輪子...

strings functions

From the Specifications

現在,這個曾經覆蓋ything你的需要:

  1. startswith(Name,'ABC')
  2. endswith(Name,'ABC')
  3. startswith(Name,'A') and endswith(Name,'C')