Indice di paging RavenDB
-
25-09-2019 - |
Domanda
Ho una domanda Linq come
var mdls = (from mdl in query dbSession.Query<MyModel>("MyIndex")
orderby mdl.Name
select dept).Skip(page.Value).Take(4);
Dove "MioIndice" è un indice semplice definito RavenDB. So che durante l'interrogazione di un indice in RavenDB restituisce "totalResults". Vedere qui
Come posso ottenere il risultato della query che ha la proprietà TotalResult
?
Soluzione
Se si sta eseguendo un LuceneQuery si ottiene un DocumentQuery tornato con una proprietà che contiene QueryResult totalResults in modo da potervi accedere come segue:
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;
Se si sta eseguendo una query LINQ, invece, allora si può chiamare Conte () sulla query prima di limitare con Skip e 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);
Altri suggerimenti
Hai bisogno di fare qualcosa di simile a questo alla fine della query
.Customize(x => x.TotalResult)
La proprietà TotalResult è disponibile solo sul LuceneQuery, non il LINQ Query.
Sembra che si può ottenere attraverso QueryResult
session.LuceneQuery<YouModel>("YourIndex")
e non da session.Query<YourModel>("YourIndex")
. Ma, mi chiedo, perché uno uso session.Query<YourModel>("YourIndex")
?