RavenDB Paging-index
-
25-09-2019 - |
Frage
Ich habe eine Linq-Abfrage als
var mdls = (from mdl in query dbSession.Query<MyModel>("MyIndex")
orderby mdl.Name
select dept).Skip(page.Value).Take(4);
Wo "MyIndex" ist ein einfacher Index in RavenDB definiert. Ich weiß, dass, während ein Index in RavenDB Abfrage es „TotalResults“ zurückgibt. Siehe hier
Wie kann ich das Abfrageergebnis erhalten, die die TotalResult
Eigenschaft hat?
Lösung
Wenn Sie eine LuceneQuery ausführen erhalten Sie eine DocumentQuery zurückgegeben, dass ein queryresult Eigenschaft hat, dass TotalResults enthält, so dass Sie darauf zugreifen können, wie folgt:
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;
Wenn Sie eine LINQ-Abfrage sind Ausführung statt, dann können Sie rufen Count () auf der Abfrage, bevor es mit Überspringen Begrenzung und Nehmen:
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);
Andere Tipps
Sie müssen so etwas wie dies am Ende der Abfrage
tun.Customize(x => x.TotalResult)
Die TotalResult Eigenschaft ist nur auf der LuceneQuery, nicht die LINQ-Abfrage.
Es scheint, dass Sie QueryResult
durch session.LuceneQuery<YouModel>("YourIndex")
und nicht von session.Query<YourModel>("YourIndex")
bekommen können. Aber ich frage mich, warum sollte man Gebrauch session.Query<YourModel>("YourIndex")
?