私は(簡体字)の作業を持っているODataController
。インスタンス化する方法をODataQueryOptions以下の方法
public class MyTypeController : ODataController
{
[HttpGet]
[EnableQuery]
[ODataRoute("myTypes")]
public IQueryable<MyType> GetMyTypes(ODataQueryOptions<MyType> options)
{
return _repo.myResultsAsQueryable();
}
}
私は、サーバーからこのメソッドを呼び出すと、私はODataQueryContext
を必要とODataQueryOptions
をインスタンス化する必要がこれを行うにできるようにしたいと思います。
これを行う方法の例(例:hereおよびhere)がありますが、それらはすべて以前のバージョンのODataを参照しているようです。 ODataQueryContextコンストラクタには現在、3番目の引数(ODataPath
パス)が必要です。これは、私が見つけることができる例では扱われていません。
編集: @snow_FFFFFF、ここではいくつかのより多くの文脈だ...私は単純にHttpClientを経由してのODataエンドポイントを消費することができることを認識し、私はあなたが言うように、直接のIQueryableと対話したいと思います。
問題は、私が取り組んでいるアプリケーションでは、ユーザーが保存して後で他のユーザーが呼び出すことのできるフィルタ(洗練された検索エンジンなど)を作成できるということです。 JSクライアントからは、IDでフィルタを検索し、フィルタをクエリ文字列に適用してODataエンドポイントに対してクエリを発行します。これはクライアント側から非常にうまく動作しますが、私はサーバ側と同様のことをすることができるようにしたいと考えています。
これは私がやりたいことですが、どうすればODataPath引数をインスタンス化できますか?
public IQueryable<MyType> FilterMyTypes(int filterID)
{
// lookup filter by filterID from db...
filter = "$filter=Status eq 1"; // for example...
ODataPath path = // but how can I get the path!!!
new ODataQueryContext(edmModel, typeof(MyType), path);
var uri = new HttpRequestMessage(HttpMethod.Get, "http://localhost:56339/mytypes?" + filter);
var opts = new ODataQueryOptions<MyType>(ctx, uri);
var results = new MyTypeController().GetMyTypes(opts);
}
本の別の用途は、以下のように動的なグループ化をサポートするために、次のようになります。
は[HttpGet]
[Route("myTypes/{filterID:int}/groupby/{groupByFieldName}")]
public IHttpActionResult GroupMyTypes(int filterID, string groupByFieldName)
{
// For example: get all Active MyTypes and group by AssignedToUserID...
// Get the results of the filter as IQueryable...
var results = FilterMyTypes(filterID);
// group on groupByFieldName
var grouped = results.GroupBy(x => GetPropertyValue(x,groupByFieldName));
// select the groupByFieldName and the count
var transformedResults = grouped.Select(g => new { g.Key, Count = g.Count() });
return Ok(transformedResults);
}
http://github.com/OData/WebApiには、参照できるテストケースが多数あります。たとえば、ODataQueryContextについては、次を参照してください。https://github.com/OData/WebApi/blob/master/OData/test/UnitTest/System.Web.OData.Test/OData/Query/ODataQueryContextTests.cs#L181- L200 –
サムに感謝、私はそれを試してみる...オープンソースを持っているMSには慣れていない... –
サム。あなたは素晴らしいです!それを答えに入れると、私はそれを受け入れることができます。本当にありがとう。魅力のように働いた。 –