我开始在我的 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成功执行top命令
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> 但这并没有什么不同