1

IQueryable(Of String)説明のリストである - を公開する ASP.NET Web API コントローラーがあります。これらのフィールドは数万のオーダーになる可能性があるため、 and を使用$top$skipてそのチャンクのみを取得します-これは正常に機能します。

現在、OData フィルターを使用してこれらの結果をフィルター処理しようとしていますsubstringof('mydesc',Property)。ご覧のとおり、フィルタリングするプロパティ名を渡す必要があります。ただし、文字列のリストを返しているため、フィルター処理するプロパティは実際にはありません。

これにより、サーバーは のようなエラーを返し No property or field 'tostring' exists in type 'String'ます$filter=substringof('asd',tostring)

呼び出しを に変更すると $filter=substringof('asd','')、エラーはスローされませんが、結果もスローされません。

私の質問は、$filterプロパティ/フィールドを探すことなく、文字列のリスト内の部分文字列を見つけるように演算子をフォーマットすることはできますか、またはフィルタリングを有効にするためだけに、単一のプロパティを持つクラスを宣言する必要がありますか?

4

3 に答える 3

3

前回回答した時から状況が変わりました。OData V3 は、'$it' を使用したプリミティブのコレクションのクエリをサポートしています。Asp.net Web API は、この構文もサポートしています。たとえば、コントローラーで次IQueryable<string>のようなリクエストを返したり送信したりできます

$filter=substring('mydesc', $it) または

$filter=長さ($it) ge 5

など。IQueryable などの他のプリミティブのコレクションを公開することもできます。

于 2013-01-25T01:43:47.520 に答える
0

残念ながら、単一のプロパティを持つクラスを宣言することが、私が考えることができる唯一の解決策のようです。パラメータOData $filterのようなものはサポートされていませんthisC#

于 2012-09-24T21:05:54.383 に答える
0

もう 1 つのあまり明白でないアプローチは、リストを表す計算された連結値を公開することです。substringof を使用して、リストを単一のプロパティ値としてクエリできます。

于 2013-01-17T08:36:34.637 に答える