WebApi 重新排序结果?
WebApi reordering results?
我对 WebApi 和 OData 有疑问。慢慢地移动一个 API 然后...现在似乎框架正在重新排序结果。
以下代码:
[EnableQuery(PageSize = 100, MaxTop = 1000, AllowedQueryOptions = AllowedQueryOptions.All)]
[ODataRoute]
public IEnumerable<Reflexo.Api.GrdJob> Get(ODataQueryOptions options) {
var nodes = Repository.GrdJob
.Include(x=>x.Cluster)
.OrderByDescending(x => x.Id)
.Select(x => new Reflexo.Api.GrdJob() {
Id = x.Id,
Identity = x.Code,
}).AsQueryable();
nodes = (IQueryable<Reflexo.Api.GrdJob>)options.ApplyTo(nodes);
var retval = nodes.ToArray();
return nodes;
}
非常简单。将调试器中的结果与我在调用该方法的屏幕上看到的结果进行比较...结果顺序不同。
请注意,我正在比较我在浏览器中看到的 JSON 的数据库端 ID 字段 (id) 和名为 retval 的数组中的字段。我强加了一个人为的默认顺序——它也进入了 SQL(选中)和数组(选中)。
只是 JSON 以不同的顺序显示结果。
我错过了什么吗?
请注意 EnableQueryAttribute
将使用一组默认的查询设置再次执行 ODataQueryOptions.ApplyTo
。 (请参阅 EnableQueryAttribute.ApplyQuery
方法源代码。)尝试删除该属性。
感谢其他贡献者post。我 运行 遇到了上述相同的问题,并设法通过将 EnsureStableOrdering = false
添加到我的 [EnableQuery()]
属性来禁用 OData 的默认排序。
我对 WebApi 和 OData 有疑问。慢慢地移动一个 API 然后...现在似乎框架正在重新排序结果。
以下代码:
[EnableQuery(PageSize = 100, MaxTop = 1000, AllowedQueryOptions = AllowedQueryOptions.All)]
[ODataRoute]
public IEnumerable<Reflexo.Api.GrdJob> Get(ODataQueryOptions options) {
var nodes = Repository.GrdJob
.Include(x=>x.Cluster)
.OrderByDescending(x => x.Id)
.Select(x => new Reflexo.Api.GrdJob() {
Id = x.Id,
Identity = x.Code,
}).AsQueryable();
nodes = (IQueryable<Reflexo.Api.GrdJob>)options.ApplyTo(nodes);
var retval = nodes.ToArray();
return nodes;
}
非常简单。将调试器中的结果与我在调用该方法的屏幕上看到的结果进行比较...结果顺序不同。
请注意,我正在比较我在浏览器中看到的 JSON 的数据库端 ID 字段 (id) 和名为 retval 的数组中的字段。我强加了一个人为的默认顺序——它也进入了 SQL(选中)和数组(选中)。
只是 JSON 以不同的顺序显示结果。
我错过了什么吗?
请注意 EnableQueryAttribute
将使用一组默认的查询设置再次执行 ODataQueryOptions.ApplyTo
。 (请参阅 EnableQueryAttribute.ApplyQuery
方法源代码。)尝试删除该属性。
感谢其他贡献者post。我 运行 遇到了上述相同的问题,并设法通过将 EnsureStableOrdering = false
添加到我的 [EnableQuery()]
属性来禁用 OData 的默认排序。