2013-06-04 3 views
3

В моем приложении C# у меня есть коллекция объектов, которые имеют свойство int Order от 1 до n.RavenDB OrderBy

Когда я так:

var listings = session.Query<Listing>().Where(x => !x.IsDeleted && x.CategoryId == category.Id && x.WorkflowStatus == WorkflowStatus.Published).OrderBy(x => x.Order); 

я получить коллекцию списков, но не 100% в правильном порядке. Поскольку это стоит порядка идет:

0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 28, 29, 3, 30, 31, 32, 33, 4 .... 

Любая идея, почему OrderBy не делает именно так, как надо?

+1

Похоже, что у них есть строки по какой-то причине –

+0

Что имеет, как строки? – Subby

+0

Считается, что свойство 'Order' является строкой вместо int, так как это было бы упорядочено, если бы они были текстом. –

ответ

7

Если вы используете индекс, вам нужно установить сортировки для свойства Order. От http://ravendb.net/docs/client-api/querying/static-indexes/customizing-results-order

Численные значения, с другой стороны, сохраняются в виде текста и, следовательно, требуют, чтобы пользователь явно указать, что тип номер, используемый так правильно механизм сортировки принудительно. Это довольно легко сделать, объявляя необходимую настройку сортировки в SortOptions в определении индекса:

Sort(x => x.Order, SortOptions.Int); 

Индекс описанный выше, позволит сортировать по значению по возрасту пользователя (1, 2, 3, 11 и т. Д.). Если мы не будем указывать этот параметр, он будет отсортирован лексически (1, 11, 2, 3 и т. Д.). Значение SortOptions по умолчанию - String. Соответствующие значения доступны для всех числовых типов (байты, двойные, поплавковые, Int, длинные и короткие).

+1

Да, но, по крайней мере, в опубликованном коде отсутствует указанное имя индекса. Если RavenDB динамически генерирует временный индекс, он автоматически добавит порядок сортировки. Но, возможно, это соответствие по предопределенному индексу, который его отсутствует, поэтому вы получаете мой +1. :) –

+0

@MattJohnson Есть ли способ указать сортировки, когда не используется статический индекс? – nickvane

+1

Если Ворон соответствует вашему запросу существующему индексу, он будет использовать порядок сортировки в этом индексе. Если он динамически создает один для вас, он создаст правильный порядок сортировки на основе типа ваших данных. Поэтому, если вы 'OrderBy' целое число в вашем запросе и ворон создает для вас индекс temp, он будет содержать целочисленный порядок сортировки в этом индексе. –

Смежные вопросы