WebApi重新排序结果?

时间:2016-02-21 14:46:12

标签: asp.net-web-api 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和名为retval的数组中的字段的数据库侧id字段(id)。我已经强加了一个人为的默认订单 - 它也会进入SQL(已检查)和数组(已检查)。

只是JSON以不同的顺序显示结果。

我错过了什么吗?

2 个答案:

答案 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的默认排序。