从RavenDB订购结果

Lap*_*ven 3 linq ravendb

我正在使用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;}
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我试图返回一组分配给特定部分的帖子,然后按(desc)命令发布属性的日期部分.然后我想按SectionAssignment Priority排序.这是我得到的:

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();
Run Code Online (Sandbox Code Playgroud)

我是以下例外:

无法将类型为"System.Linq.Expressions.MethodCallExpressionN"的对象强制转换为"System.Linq.Expressions.MemberExpression".

我可以看到为什么会这样,但我无法弄清楚如何使这项工作.有什么建议?

小智 6

一个有根据的猜测是,你的ThenBy子句导致它失败.

如果我没记错的话,Ordering和Querying 谓词不能引用其他字段 - 这是Lucene的限制.

另一种解决方法是设置一个手动索引,将索引优先级作为一个字段拉出,然后您可以按顺序排序.