假设我们有以下Map索引:
public class CommentsIndex : AbstractIndexCreationTask<Post>
{
public class IndexResult
{
public string PostId {get;set;}
public DateTime CommentDateTime {get;set;}
}
public CommentsIndex()
{
Map = posts => from post in posts
from comment in post.Comment
select new { PostId = post.Id, CommentDateTime = comment.DateTime };
}
}
此索引查询的结果将是Post文档的集合。但是如何通过CommentDateTime
查询呢?由于CommentDateTime
不属于Post
文档:
_documentSession.Query<Post, CommentsIndex>().Where(x => x.CommentDateTime < DateTime.UtcNow).ToList();
P上。 S.我知道我可以使用实时投影或调用AsProjection
来塑造索引查询结果,但我想对于这样一个简单的案例应该有一个更自然的解决方案。
答案 0 :(得分:2)
_documentSession.Query<CommentsIndex.IndexResult, CommentsIndex>()
.Where(x => x.CommentDateTime < DateTime.UtcNow)
.As<Post>()
.ToList();
注意:.As<T>()
和.AsProjection<T>()
之间存在根本区别,因为只有后者才会尝试获取字段,而第一个强制转换结果。