Я много раз читал, что RavenDb не выполняет никаких вычислений во время запроса. Например, вот цитата из статьи Айенде «Боль внедрения провайдеров LINQ»
Одной из особенностей RavenDB является то, что он не выполняет абсолютно никаких
вычисления во время запросов; все данные для запроса уже
подготовлен. Это означает, что мы можем достичь очень хороших скоростей запросов.
Но в то же время есть функция Live Projection, которая позволяет производить некоторые вычисления во время запроса. Например, здесь я использую сортировку и подсчет суммы:
TransformResults = (database, post) => from post in posts
order by post.DateTime
select new
{
Id = post.Id,
CommentsCount = post.Comments.Sum()
}
То есть RavenDb позволяет делать вычисления на лету, не так ли?
Обновление. Я решил привести еще один пример, когда вам действительно нужно вычислять (сортировать) вещи во время запроса. Задача: выберите 10 последних постов для определенного блога (предположим, у нас много блогов в нашей системе блогов):
public class LastPostsCommentsIndex: AbstractIndexCreationTask<Post>
{
public class IndexResult
{
public string BlogId {get; set;}
}
public class PostComment
{
public string PostId { get; set; }
public DateTime DateTime { get; set; }
public string Author { get; set; }
public string Text { get; set; }
}
public LastPostsCommentsIndex()
{
Map = posts => from post in posts
select new { BlogId = post.BlogId };
TransformResults = (database, posts) => from post in posts
from comment in post.Comments
orderby comment.DateTime descending
select new { PostId = post.Id, DateTime = comment.DateTime, Author = comment.Author, Text = comment.Text };
}
}
В этом случае мы не можем сортировать результаты индекса карты - мы должны сортировать результаты на лету.