我遇到了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和名为retval的数组中的字段的数据库侧id字段(id)。我已经强加了一个人为的默认订单 - 它也会进入SQL(已检查)和数组(已检查)。
只是JSON以不同的顺序显示结果。
我错过了什么吗?
答案 0 :(得分:2)
请注意EnableQueryAttribute
将使用默认的一组查询设置再次执行ODataQueryOptions.ApplyTo
。 (请参阅EnableQueryAttribute.ApplyQuery
方法来源。)尝试删除属性。
答案 1 :(得分:0)
感谢这篇文章中的其他贡献者。我遇到了上述相同的问题,并设法通过将<select> <?php foreach ($attribute['values'] as $value) { ?>
<option><?php echo $value['name']; ?></option>
<?php foreach ($value['filter'] as $filter) { ?>
<?php if (in_array($filter['filter_id'], $filter_category)) { ?>
<option value="<?php echo $filter['filter_id']; ?>" id="filter<?php echo $filter['filter_id']; ?>" selected>
<?php echo $filter['name']; ?>
</option>
<?php } else { ?>
<option value="<?php echo $filter['filter_id']; ?>" id="filter<?php echo $filter['filter_id']; ?>">
<?php echo $filter['name']; ?>
</option>
<?php } ?>
<?php } ?>
<?php } ?>
</select>
添加到我的EnsureStableOrdering = false
属性来禁用OData的默认排序。