У меня есть более 128 документов, в моей базе данных Raven типа Foo
:RavenDB C# API: Как выполнить фильтр запроса на стороне сервера
class Foo {
public string Id {get; set;}
public string Name {get; set;}
}
Для двух документов, то Name
свойство имеет значение "MyName"
.
С IDocumentSession session
, если я выполняю session.query<Foo>().Where(f => f.Name.equals("MyName"))
, я получаю нулевые результаты. Это связано с тем, что два документа, которые соответствуют "MyName"
, не возвращаются в 128 документах, возвращенных с сервера RavenDB (это размер страницы на клиентской стороне по умолчанию). Таким образом, клиентский API фильтрует по Name=="MyName"
по 128 документам, но поскольку мои два совпадающих документа не были среди первых 128, то не найдено соответствующих документов. Я проверил эту гипотезу 1. глядя на моей RavenDb студии в браузере и проверив, что эти два документа существует и 2. путь реализации неограниченного, потоковый запрос и успешно получения этих двух документов:
var results = new List<Foo>();
var query = session.Query<Foo>().Where(f => f.Name.equals("MyName");
using (var enumerator = session.Advanced.Stream(query){
while (enumerator.MoveNext()){
results.Add(enumerator.Current.Document);
}
}
Однако, потоковое решение не идеально для меня. Мой вопрос заключается в следующем: есть ли способ попросить RavenDB выполнить фильтр по имени на сервере, прежде чем возвращать 128 документов клиенту? Я хочу выполнить поиск по всем документам в моей базе данных для моего заданного фильтра Where
, но как только фильтр применяется, я совершенно доволен тем, что сервер возвращает < = 128 документов API-интерфейсу клиента.
Метод по существу возвращает 'List', и я возвращаю 'query.ToList()'. Спасибо, я думал, что это не так. Я собираюсь поиграть с ним немного больше сегодня и посмотреть, могу ли я понять, почему я вижу это поведение. –
kjb4