从RavenDB订购结果

时间:2012-03-29 03:21:13

标签: 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;}
}

在我的控制器中,我试图返回一组分配给特定部分的帖子,然后按(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();

我是以下例外:

  

无法投射类型的对象   输入'System.Linq.Expressions.MethodCallExpressionN'   'System.Linq.Expressions.MemberExpression'。

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

1 个答案:

答案 0 :(得分:6)

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

如果我没记错的话,订购和查询谓词不能引用其他字段 - 这是Lucene的限制。

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