Indice de pagination RavenDB
-
25-09-2019 - |
Question
J'ai une requête Linq comme
var mdls = (from mdl in query dbSession.Query<MyModel>("MyIndex")
orderby mdl.Name
select dept).Skip(page.Value).Take(4);
Où "MyIndex" est un simple indice défini dans RavenDB. Je sais que si l'interrogation d'un index en RavenDB il retourne « totalResults ». Voir
Comment puis-je obtenir le résultat de la requête qui a la propriété TotalResult
?
La solution
Si vous exécutez un LuceneQuery vous obtenez un DocumentQuery retourné qui a une propriété QueryResult qui contient totalResults afin que vous puissiez accéder comme suit:
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 vous exécuter une requête LINQ plutôt, vous pouvez appeler Count () sur la requête avant de limiter avec Skip et 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);
Autres conseils
Vous devez faire quelque chose comme ça à la fin de votre requête
.Customize(x => x.TotalResult)
La propriété TotalResult est disponible uniquement sur le LuceneQuery, pas la requête LINQ.
Il semble que vous pouvez obtenir QueryResult
par session.LuceneQuery<YouModel>("YourIndex")
et non de session.Query<YourModel>("YourIndex")
. Mais, je me demande pourquoi aurait-on utiliser session.Query<YourModel>("YourIndex")
?