2017-02-09 9 views
1

現在、odataを使用してサーバー側のフィルタリングを実行するアプリケーションで、サードパーティのグリッドコントロールを使用しています。検索ボックスに入力すると、フィルタ文字列はすべてのフィールドに適用され、一致するフィールドのみが返されます。Microsoft OData C#WebApi文字列のフィルタリングまたはキャスト

私は表示している2つのフィールド、整数Idフィールド、および文字列Nameフィールドを持っています。

(substringof( '24')ID(TOLOWER))または(substringof( '24'、TOLOWER(名)))

:フィルタが適用されたとき、ODATAはフィルタを含んODataQueryOptionsデータ型を提供し

Idに24、名前フィールドに24のレコードを返すことが期待されます。

代わりに例外が発生します。例外は、IdがIntフィールドであり、tolowerおよびsubstringという文字列関数が整数フィールドに実装されていないために発生します。

キャストは実装されていないようですので、単にintに文字列をキャストすることはできません。

この問題は、多くの他の多くの人々にとって問題であったに違いありません。だから、他の人たちはこの問題をどのように乗り越えますか?

(nugetによると、私はMicrosoft.Data.ODataのv5.8.2、およびMicrosoft.AspNet.Webapi.ODataのV5.7.0を使用しています。私のプロジェクトは、.NET Framework 4.5.2である)

答えて

0

として、 casting int to string in OData raises errorに記載されており、さらにhttps://msdn.microsoft.com/en-us/library/dd541472.aspxに説明されているように、intからstringにキャストはありません。

あなたのグリッドコントロールは次のように正しいクエリを発行する必要があります:

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

あなたが発信側のクエリを変更できない場合は、私がModifying ODataQueryOptions on the flyで説明ODataQueryOptions自分を、書き換えることができます。この記事では、現在のODataQueryOptionsを抽出し、新しいODataQueryOptionsの作成に使用できる新しいUriを構築する方法を示しています。

関連する問題