Упорядочить по описанию несколько свойств в Neo4jClient

Предположим, у меня есть 4 фотографии, и я хочу вернуть список, отсортированный сначала по Rating desc, а затем по RatingsCount desc. Ниже шифрованный запрос дает мне правильный результат:

MATCH (n:`Photo`) WHERE n.RatingsCount > 0 RETURN n.Rating, n.RatingsCount ORDER BY n.Rating DESC, n.RatingsCount DESC LIMIT 20

Идентификатор 1-рейтинг 9-счетчик рейтингов 1

Идентификатор 3-Рейтинг 7-Счетчик рейтингов 2

Идентификатор 2-Рейтинг 7-Счетчик рейтингов 1

Идентификатор 4-Рейтинг 2-Счетчик рейтингов 1

К сожалению, я не могу перевести его в Neo4jClient. Ниже запрос дает мне фотолист, упорядоченный по возрастанию рейтинга и убыванию рейтинга:

var query = await graphClient.Cypher
            .Match("(photo:Photo)")
            .Where((PhotoEntity photo) => photo.RatingsCount > 0);
            .ReturnDistinct((photo) => new
            {
                Photo = photo.As<PhotoEntity>()
            })
            .OrderByDescending("photo.Rating", "photo.RatingsCount")
            .Limit(20)
            .ResultsAsync;

Идентификатор 4-Рейтинг 2-Счетчик рейтингов 1

Идентификатор 3-Рейтинг 7-Счетчик рейтингов 2

Идентификатор 2-Рейтинг 7-Счетчик рейтингов 1

Идентификатор 1-рейтинг 9-счетчик рейтингов 1

Если я изменю порядок Rating и RatingsCount, я получу фотографии в еще более странном порядке :) Любая подсказка, что я здесь делаю неправильно?

var query = await graphClient.Cypher
                .Match("(photo:Photo)")
                .Where((PhotoEntity photo) => photo.RatingsCount > 0);
                .ReturnDistinct((photo) => new
                {
                    Photo = photo.As<PhotoEntity>()
                })
                .OrderByDescending("photo.RatingsCount", "photo.Rating")
                .Limit(20)
                .ResultsAsync;

Идентификатор 1-рейтинг 9-счетчик рейтингов 1

Идентификатор 2-Рейтинг 7-Счетчик рейтингов 1

Идентификатор 4-Рейтинг 2-Счетчик рейтингов 1

Идентификатор 3-Рейтинг 7-Счетчик рейтингов 2


person Jenny Pettersson    schedule 10.09.2014    source источник


Ответы (1)


Я взглянул на исходный код Neo4jClient и OrderByDescending() просто string.join()s его аргументы с запятыми и добавил "DESC" в конце. Другими словами: он сортирует ASC по каждому свойству, кроме последнего. Я согласен, что это противоречит интуиции, поэтому я стараюсь избегать этого.

Вместо этого вы можете использовать OrderBy():

OrderBy("photo.RatingsCount DESC, photo.Rating DESC")
person Jan Van den bosch    schedule 10.09.2014
comment
Ах, конечно, в следующий раз я проверю источник Neo4jClients, прежде чем задавать вопрос здесь :) Я действительно пробовал этот подход, но с описанием в нижнем регистре вместо DESC, что дало мне исключение. В моем случае я хочу сначала отсортировать по рейтингу, но OrderBy(photo.Rating DESC, photo.RatingsCount DESC) работает как шарм, спасибо!! - person Jenny Pettersson; 11.09.2014