我在我的OData EDM中使用Product
实体,具有GUID
键属性,但是如果不使用Number
,我想强制使用另一个属性$orderby
对EntitySet的结果进行排序。所以我希望能够正常使用$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();
}
这里的问题是queryOptions.OrderBy
是只读的,我无法分配给它。
有什么建议?请。
我最终实现了一个继承自EnableQueryAttribute
的属性,正如https://stackoverflow.com/a/41933056/236384在这个答案@afshar-mohebbi中提出的那样
操作代码现在看起来像这样:
[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);
}
}
希望这对以后的人有所帮助,