そこで、mvc4 Web API を使用して、url (Get) “/api/things” が次のデータを返すコントローラーを作成しました。
<ArrayOfThing>
<Thing>
<Id>1</Id>
<Description>The Thing Desc</Description>
<Categories>
<Category><Id>1</Id></Category>
<Category><Id>2</Id></Category>
</Categories>
</Thing>
<Thing>
<Id>2</Id>
<Description>The Other Thing Desc</Description>
<Categories>
<Category><Id>1</Id></Category>
<Category><Id>3</Id></Category>
</Categories>
</Thing>
</ArrayOfThing>
*物とカテゴリには多対多の関係があることに注意してください
「Thing」リソースが 1 つ必要な場合は、次のルート URL (Get) 「/api/things/{id}」に一致するコントローラーを使用する必要があることはわかっています。
しかし、URL (Get) "/api/things" によって返されるデータのサブセットを取得したい場合はどうでしょう。IQueryable を返すようにコントローラーを変更する OData プロトコルをテストしたところ、Id や Description などの「Thing」のプロパティで $filter したい場合に問題なく動作しました。残念ながら、Category に基づいてフィルターをかけたいときにうまくいきませんでした。これは、Categories が内部配列であるためだと思います。
では、カテゴリに基づいてフィルタリングするにはどうすればよいでしょうか?