Índice de paginación de RavenDB
-
25-09-2019 - |
Pregunta
Tengo una consulta de Linq como
var mdls = (from mdl in query dbSession.Query<MyModel>("MyIndex")
orderby mdl.Name
select dept).Skip(page.Value).Take(4);
Donde "MyIndex" es un índice simple definido en RavenDB.Sé que al consultar un índice en RavenDB devuelve "TotalResults".Ver aquí
¿Cómo puedo obtener el resultado de la consulta que tiene el TotalResult
¿propiedad?
Solución
Si se está ejecutando un LuceneQuery se obtiene una DocumentQuery devuelto que tiene una propiedad que contiene QueryResult totalResults para que pueda acceder a ella de la siguiente manera:
var documentQuery = (from mdl in query dbSession.LuceneQuery<MyModel>("MyIndex")
orderby mdl.Name
select dept).Skip(page.Value).Take(4);
var totalResults = documentQuery.QueryResult.TotalResults;
Si está ejecutando una consulta de LINQ entonces puede llamar Count () en la consulta antes de limitar con Skip y Take:
var linqQuery = (from mdl in query dbSession.Query<MyModel>("MyIndex")
orderby mdl.Name
select dept);
var totalResults = linqQuery.Count();
var pageOfResults = linqQuery.Skip(page.Value).Take(4);
Otros consejos
Debes hacer algo como esto al final de tu consulta.
.Customize(x => x.TotalResult)
La propiedad TotalResult solo está disponible en LuceneQuery, no en LINQ Query.
Parece que se puede obtener a través QueryResult
session.LuceneQuery<YouModel>("YourIndex")
y no de session.Query<YourModel>("YourIndex")
. Pero, me pregunto por qué lo haría un uso session.Query<YourModel>("YourIndex")
?