【发布时间】:2023-03-08 22:20:02
【问题描述】:
更新
投票here on User Voice 解决歧义。
我编写了一个继承自 ODataController 的 OData WebAPI 控制器。
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 添加到传递给方法的ODataQueryOptions 的OrderBy 属性中。
问题
此更改对控制器生成的语句没有影响。
处理继续进行,就好像我什么都没做一样,任何OrderBy
应用于ManyColumns 实体被替换为原始请求的$orderby 参数中指定的原始OrderBy。
进一步检查,ODataQueryOptions 似乎可能是不可变的。它的大部分属性只有get 访问器。
问题
我是不是误用了 OrderByQueryOption 的实施失败?
有没有办法修改将应用于请求的ODataQueryOptions,稍后在管道中?
【问题讨论】:
标签: c# asp.net-web-api odata asp.net-web-api2 asp.net-web-api-odata