更新
在用户语音上投票以解决歧义。
我编写了一个继承自ODataController
.
public class ManyColumnsController : ODataController
{
[Queryable(
AllowedOrderByProperties = "Aa,Bb,Cc,Dd",
EnsureStableOrdering = false,
MaxOrderByNodeCount = 2)]
public IQueryable<ManyColumn> GetManyColumns(
ODataQueryOptions<ManyColumn> options)
{
// Because I've disabled EnsureStableOrdering,
// I need to check column "Dd" is always included
// in the OrderBy option. This will ensure stable ordering.
if (!options.OrderBy.RawValue.Contains("Dd")
{
var entityType = options.Context.ElementType as IEdmEntityType;
var ddProperty = entityType.DeclaredStructuralProperties()
.Single(p => p.Name == "Dd");
options.OrderBy.OrderByNodes.Add(new OrderByPropertyNode(
ddProperty,
OrderByDirection.Descending));
}
return this.context.ManyColumns;
}
}
此代码运行,并在传递给方法的属性中OrderByNode
添加了一个额外的内容。OrderBy
ODataQueryOptions
问题
此更改对控制器生成的语句没有影响。处理继续进行,就好像我什么都没做一样,任何OrderBy
应用于实体的东西都被原始请求的参数中指定的原始ManyColumns
值替换。OrderBy
$orderby
在进一步的检查中,它似乎ODataQueryOptions
可能是不可变的。它的大部分属性只有get
访问器。
问题
我是否只是在实施中滥用了失败OrderByQueryOption
?
有没有办法修改ODataQueryOptions
将应用于请求的,稍后在管道中?