2014-09-10 2 views
2

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

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

Id 1-Рейтинг 9-Ratingscount 1

Id 3-Рейтинг 7-Ratingscount 2

Id 2-Рейтинг 7-Ratingscount 1

Id 4-Rating 2-Ratingscount 1

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

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; 

Id 4-Рейтинг 2-Ratingscount 1

Id 3-Рейтинг 7-Ratingscount 2

Id 2-Рейтинг 7 -Ratingscount 1

Id 1-Рейтинг 9-Ratingscount 1

Если изменить порядок рейтинга и 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; 

Id 1-Рейтинг 9-Ratingscount 1

Id 2-Рейтинг 7-Ratingscount 1

Id 4-Рейтинг 2-Ratingscount 1

Id 3-Рейтинг 7-Ratingscount 2

ответ

2

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

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

OrderBy("photo.RatingsCount DESC, photo.Rating DESC") 
+0

Ах, конечно, в следующий раз я буду проверять источник Neo4jClients перед тем как задать вопрос здесь :) я на самом деле пробовал этот подход, но с строчным по алфавиту вместо DESC, который дал мне исключение. В моем случае я хочу сначала отсортировать по рейтингу, но OrderBy («photo.Rating DESC, photo.RatingsCount DESC») работает как шарм, спасибо! –

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