1

アクションフィルターを使用して、OdataURIをLinq式に変換したいと思います。結果の式を使用して非SQLの基幹業務システムにクエリを実行しているため、これを行っています。WCF Web APIでは、変換されたクエリがリクエストオブジェクトのプロパティとして追加されたため、これは簡単でした。

var query = (EnumerableQuery)request.Properties["queryToCompose"];

それは消えたようです。これを実現するために使用できるパブリックAPIはありますか?

4

3 に答える 3

1

私は似たようなことを試みてきました。完璧ではありませんが、クエリ文字列から直接OData式を取得し、手動でLINQ式を作成できます。

var queryParams = HttpUtility.ParseQueryString( ControllerContext.Request.RequestUri.Query );
var top = queryParams.Get( "$top" );
var skip = queryParams.Get( "$skip" );
var orderby = queryParams.Get( "$orderby" );

そして、それをあなたIQueryableまたはあなたがフィルタリングに使用しているものに直接適用します。それほど有用ではありませんが、その始まりです。

于 2012-02-24T15:41:50.907 に答える
1

したがって、クエリによってリクエストプロパティコレクションのキーが変更されたことが判明しました。また、クエリを解析する内部フィルターはカスタムフィルターの後に実行されるため、クエリ値は追加されないようです。翻訳されたクエリを取得するには、コントローラーアクション内で以下を呼び出します。

(EnumerableQuery<T>)this.Request.Properties["MS_QueryKey"];
于 2012-02-26T23:55:35.603 に答える
0

Linq2Restをチェックしてください。それはこの問題を解決します。

于 2012-03-11T10:05:03.773 に答える