2017-02-09 41 views
1

我目前在我的應用程序中使用第三方網格控件,它使用odata來執行服務器端過濾。當我填入搜索框時,過濾器字符串應用於所有字段並僅返回匹配的字符串。微軟OData C#WebApi過濾或鑄造Int到字符串

我有兩個字段,我正在顯示,一個整數ID字段和一個字符串名稱字段。當應用所述過濾器,ODATA提供一個包含濾波器的ODataQueryOptions數據類型:

(substringof( '24',tolower的(Id)的))或(substringof( '24',tolower的(名稱)))

預期結果是返回名稱字段中Id或24中具有24的任何記錄。

相反,這會導致異常。異常是由於Id是一個Int字段而引起的,字符串函數tolower和substring沒有在整數字段上實現。

演員似乎並沒有被執行,所以我不能簡單地轉換爲int到一個字符串。

這個問題對許多其他人來說肯定是個問題。那麼其他人如何解決這個問題呢?

(據的NuGet,我使用Microsoft.Data.OData的v5.8.2,並且Microsoft.AspNet.Webapi.OData的V5.7.0。我的項目是.NET框架4.5.2)

回答

0

由於描述於casting int to string in OData raises error並在https://msdn.microsoft.com/en-us/library/dd541472.aspx中進一步解釋,從intstring沒有演員。

網格控制將不得不發出正確的查詢是這樣的:

Id eq 24 or (substringof('24',tolower(Name))) 

如果你不能改變發端的查詢,你可以重寫ODataQueryOptions自己,這是我在Modifying ODataQueryOptions on the fly描述。該文章基本上向您展示瞭如何提取當前的ODataQueryOptions,並從中構建一個新的Uri,用於創建新的ODataQueryOptions。