Индекс карты RavenDb запрашивает путаницу - PullRequest
0 голосов
/ 30 января 2012

Предположим, у нас есть следующий индекс карты:

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();

PS Я знаю, что могу использовать прямую проекцию или вызов AsProjection для формирования результата запроса индекса, но ядумаю, для такого простого случая должно быть более естественное решение.

1 Ответ

2 голосов
/ 30 января 2012
_documentSession.Query<CommentsIndex.IndexResult, CommentsIndex>()
    .Where(x => x.CommentDateTime < DateTime.UtcNow)
    .As<Post>()
    .ToList();

Примечание: между .As<T>() и .AsProjection<T>() есть принципиальная разница, так как только последний будет пытаться получить поля, а первый будет выводить результаты.

...