2010-08-31 24 views
4

J'ai une requête Linq commeindex de recherche de personnes RavenDB

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 lors de l'interrogation d'un index dans RavenDB, il renvoie "TotalResults". Voir here

Comment puis-je obtenir le résultat de la requête qui a la propriété TotalResult?

Répondre

6

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); 
+0

Je reçois 'QueryResult' si je fais 'LuceneQuery ' mais pas dans le cas ci-dessus. –

+0

@ajay Bon point mettant à jour ma réponse –

0

Vous devez faire quelque chose comme ça à la fin de votre requête

.Customize(x => x.TotalResult) 

La propriété est TotalResult disponible uniquement sur le LuceneQuery, pas la requête LINQ.

+0

Je n'ai pas trouvé la propriété 'x.TotalResult'. pouvez-vous s'il vous plaît me montrer la déclaration complète LINQ. –

+0

Désolé, j'ai raté un peu, voir les documents pour la syntaxe complète, http://ravendb.net/faq/total-results-in-paged-data-set –

+0

là, il parle de 'session.LuceneQuery ' mais ici J'utilise 'session.Query ' –

0

il semble que vous pouvez obtenir QueryResult par session.LuceneQuery<YouModel>("YourIndex") et non de session.Query<YourModel>("YourIndex"). Mais, je me demande pourquoi utiliser un session.Query<YourModel>("YourIndex")?