ASP .NET MVC 4 が提供するWebAPIを使用して作成された Web サービスがあります。 WebAPI が機能する最上位のレイヤーがOData クエリ( $filter
、$top
、など$skip
) を自動的に処理することはわかっていますが、フィルタリングを自分で処理したい場合はどうすればよいでしょうか? ?
データベースからデータを返すだけではありませんが、いくつかのプロパティを追加したり、いくつかの変換を行ったりする別のレイヤーがあります。そのため、すべてのデータをクエリし、それらを変換して、OData フィルタリングのために WebAPI クラスに返すのは良いことではありません。足りる。もちろん、それはひどく遅く、一般的にくだらないアイデアです。
OData クエリ パラメータを WebAPI エントリ ポイントから呼び出してデータを取得および変換する関数に伝達する方法はありますか?
たとえば/api/people?$skip=10&$top=10
、サーバー上で GET を呼び出すと、次のようになります。
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
そしてでPersonService
:
public IQueryable<Person> getPeople(var ODataQueries) {
IQueryable<ServerSidePerson> serverPeople = from p in dbContext.ServerSidePerson select p;
// Make the OData queries
// Skip
serverPeople = serverPeople.Skip(ODataQueries.Skip);
// Take
serverPeople = serverPeople.Take(ODataQueries.Take);
// And so on
// ...
// Then, convert them
IQueryable<Person> people = Converter.convertPersonList(serverPeople);
return people;
}