我正在使用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'。
我可以看到为什么会这样,但我无法弄清楚如何使这项工作。 有什么建议吗?
答案 0 :(得分:6)
一个有根据的猜测是,你的ThenBy子句导致它失败。
如果我没记错的话,订购和查询谓词不能引用其他字段 - 这是Lucene的限制。
解决方法是设置一个手动索引,将分类优先级作为一个字段拉出,然后您可以按顺序排序。