У меня возникла проблема с WebApi и OData. Медленно перемещая API и ... теперь кажется, что структура переупорядочивает результаты.Результаты переупорядочения WebApi?
Следующий код:
[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;
}
как simlple, как он получает. Сравнивая результаты в отладчике с тем, что я вижу на экране, вызывая метод ... результаты имеют другой порядок.
Обратите внимание, что я сравниваю поля id id стороны (id) обоих JSON, которые я вижу в браузере, и поля в массиве с именем retval. Я наложил искусственный заказ по умолчанию, который также попадает в SQL (проверено) и array (checked).
Только JSON показывает результаты в другом порядке.
Я что-то не хватает?
Отвечает ли это на ваш вопрос вообще, [Опция запроса OData вверх: данные, подлежащие сортировке по первому ключу) (http://peterkellner.net/2010/03/31/odata-wcfdataservice-top-orderby-default- Сортировать/)? Похоже, что есть некоторые типы поведения, которые относятся к передаче в '$ top = x'. – Igor
Не совсем. Забавно, я не вижу разумного порядка в результате (у которого больше полей). И я вижу порядок в массиве, который выходит из моей функции. – TomTom
Странно, я хватаюсь за соломинку здесь, но: как насчет того, чтобы вернуть его с помощью 'AsQueryable()' вместо 'ToArray' (если он уже не является« AsQueryable() », просто закомментируйте строку все вместе). Помимо этого вы можете подталкивать бремя сортировки к клиенту с помощью '$ orderby'. – Igor