MVC4 アプリケーションで OData の使用を開始していますが、複雑なオブジェクトを使用しているため、IQueryable でソートまたはフィルター操作を実行できないという問題があります。以下は、私が達成しようとしているものの簡単な例です。
API コントローラーが MyObjects のコレクションを IQueryable として返そうとしています。
public IQueryable Get()
{
List<MyObject> myObjects = GetMyObjects();
return myObjects.AsQueryable() ;
}
各 MyObject には、並べ替えやフィルター処理を行うプロパティを持つ InnerObject が含まれています。
public class MyObject
{
[Key]
public MyInnerObject innerObject{ get; set; }
public MyObject(Dictionary<string, object> value)
{
innerObject= new MyInnerObject(){
item = value["item"].ToString(),
itmdesc = value["itmdesc"].ToString()
};
}
}
public class MyInnerObject
{
public string item { get; set; }
public string itmdesc { get; set; }
}
URLからトップコマンドを正常に実行できます
localhost:5050/Test/Get?$top=10
しかし、私は本当に自分の結果を並べ替えたいと思っています
localhost:5050/Test/Get?$top=10&$orderby=innerObject.item
私が試してみました
localhost:5050/Test/Get?$top=10&$orderby=innerObject.item
localhost:5050/Test/Get?$top=10&$orderby=innerObject/item
localhost:5050/Test/Get?$top=10&$orderby=item
助言がありますか?
編集:
item および itmdesc プロパティを MyObject 内に配置すると機能することに注意してください。ただし、私の目的 (これは複雑なエンティティの単なる縮小版です) では、これらを複雑な型でラップする必要があります。
私のApiコントローラーでは、 IQueryable< MyObject> も試しましたが、違いはありません