更新
在用户语音上投票以解决歧义。
我编写了一个继承自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添加了一个额外的内容。OrderByODataQueryOptions
问题
此更改对控制器生成的语句没有影响。处理继续进行,就好像我什么都没做一样,任何OrderBy
应用于实体的东西都被原始请求的参数中指定的原始ManyColumns值替换。OrderBy$orderby
在进一步的检查中,它似乎ODataQueryOptions可能是不可变的。它的大部分属性只有get访问器。
问题
我是否只是在实施中滥用了失败OrderByQueryOption?
有没有办法修改ODataQueryOptions将应用于请求的,稍后在管道中?