Результаты заказа от RavenDB - PullRequest
3 голосов
/ 29 марта 2012

Я использую RavenDB и сталкиваюсь с проблемами при попытке упорядочить результаты.

Вот пример классов.

public class Post {
    public int Id {get;get;}
    public DateTimeOffset Posted {get;set;}
    public List<SectionAssignment> Sections{get;set;}
    public string Headline {get;set;}
}
public class SectionAssignment {
    public int SectionId {get;set;}
    public int Priority {get;set;}
}

В моем контроллере я пытаюсь вернуть наборсообщений, которые назначены определенному разделу, а затем упорядочить (desc) часть даты размещенного свойства.Затем я хочу отсортировать по приоритету раздела.Вот что у меня есть:

var posts= RavenSession.Query<Post>()
    .Where(s => s.Sections.Any(sec=>sec.SectionId==5))
    .OrderByDescending(s => s.Posted.Date)
    .ThenBy(s => s.Section.Where(sec => sec.Id == 5).Select(sc => sc.Priority).Single())
    .Take(10)
    .ToList();

Я следующее исключение:

Невозможно привести объект типа 'System.Linq.Expressions.MethodCallExpressionN' к типу 'System.Linq.Expressions.MemberExpression '.

Я могу понять, почему это происходит, но я не могу понять, как заставить это работать.Есть предложения?

1 Ответ

6 голосов
/ 29 марта 2012

Обоснованное предположение состоит в том, что именно ваше предложение ThenBy приводит к его провалу.

Если я правильно помню, предикаты порядка и запросов не могут ссылаться на другие поля - это ограничение Lucene.

Обходной путь - вместо этого установить ручной индекс, который вытягивает приоритет сортировки в виде поля, которое затем можно упорядочить.

...