【发布时间】:2012-10-05 20:34:39
【问题描述】:
我开始在我的 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
【问题讨论】:
标签: c# asp.net-mvc asp.net-web-api odata