我在OData EDM中拥有Product
个实体,具有一个GUID
键属性,但是我想强制将EntitySet的结果与另一个属性Number
进行排序,如果{{ 1}}未使用。因此,我希望能够正常使用$orderby
,但是如果不存在,我想将其添加到$orderby
的控制器动作中,到目前为止,这就是我要达到的目的。
ODataQueryOptions
这里的问题是[EnableQuery()]
public IQueryable<Product> Get(ODataQueryOptions<Product> queryOptions)
{
if (queryOptions.OrderBy == null)
{
// do something to add $orderby=Number to queryOptions
}
return _ProductRepository.GetAll();
}
是只读的,我无法分配给它。
有什么建议吗?拜托。
答案 0 :(得分:0)
我最终实现了一个属性,该属性继承自https://stackoverflow.com/a/41933056/236384的答案@afshar-mohebbi中的EnableQueryAttribute
操作代码现在看起来像这样:
[CustomizedEnableQuery()]
public IQueryable<Product> Get()
{
return _ProductRepository.GetAll();
}
属性实现如下:
public class CustomizedEnableQueryAttribute : EnableQueryAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var url = actionContext.Request.RequestUri.OriginalString;
// add $orderby=Number to url
if (url.ToLower().IndexOf("$orderby") == -1)
{
var orderByClause = "$orderby=Number";
var newUrl = url.IndexOf('?') == -1
? $"{url}?{orderByClause}"
: $"{url}&{orderByClause}";
actionContext.Request.RequestUri = new Uri(newUrl);
}
base.OnActionExecuting(actionContext);
}
}
希望这对以后有帮助的人