【发布时间】:2015-08-29 03:46:50
【问题描述】:
我有一个DbSet<Items> 收藏。
主键是一个 Guid。我不想按这个主键排序。我想通过一个名为“Order”的可编辑十进制属性进行排序。
我的代码非常简单,在用户将“$top”参数放入请求之前,它运行良好:
public class ItemsController : ApiController
{
protected DbContext ctx = // ...
// GET api/documents
[EnableQuery()]
public IQueryable<Item> Get()
{
return ctx.Items.OrderBy(o => o.Order).AsQueryable();
}
当用户将“$top”放入查询字符串时,顺序会变得一团糟(它可能会强制通过主键进行排序,以获得一致的分页结果——但是,在我的情况下,这是具有相反的效果,它使我无法获得一致的分页结果)。
我尝试将.AsQueryable() 移动到查询中的更早位置(在.OrderBy(...) 子句之前),我尝试不使用.AsQueryable(),我尝试使用两个AsQueryables 等等。
此表中将有 很多 个项目,因此需要通过 IQueryable 完成(通过 IEnumerable 枚举 Web 服务器上的所有项目不是这里有一个选项)。
到目前为止唯一有效的是从客户端传递“$orderby=Order”,但我不想强制这样做(似乎很容易被遗忘)。
1.) 我可以做些什么来让我的Order 属性排序成为这里的默认行为?
2.) 否则,是否有办法欺骗 WebApi / OData 认为已指定自定义“$orderby=Order”子句?
【问题讨论】:
标签: linq entity-framework asp.net-web-api odata iqueryable