2014-06-08 6 views
0

je index simple RavenDB:RavenDB requête Linq plus et la comparaison inférieure

Carte:

from q in docs.Questions 
from Tag in q.Tags 
select new { Tag, Count = 1 } 

Réduire

from result in results 
group result by result.Tag into g 
select new { Tag = g.Key, Count = g.Sum(x=>x.Count) } 

Et j'ai un code pour l'appeler:

var query = from item in session.Query<TagCount>("Questions/Tags") select item; 
Console.WriteLine(query.Count()); 
foreach (var result in query) 
{ 
    Console.WriteLine("{0} - {1}", result.Tag, result.Count); 
} 

Produire une sortie:

3 
Games - 1 
RavenDb - 2 
Intro - 1 

comme prévu. Mais, si ajouter du code après cette boucle:

var counted = from item in query 
where item.Count > 0 
select item; 
Console.WriteLine(counted.Count()); 

sortie serait:

3 
Games - 1 
RavenDb - 2 
Intro - 1 
0 

WTF? Pourquoi le compte compté est zéro?

Mais si je '==' en comparaison compté, il fonctionne:

var counted = from item in query 
where item.Count == 1 
select item; 
Console.WriteLine(counted.Count()); 

Produit

3 
Games - 1 
RavenDb - 2 
Intro - 1 
2 

Que se passe-t-il?

+0

Qu'obtenez-vous si vous faites ceci: 'var results = session.Query (" Questions/Tags "). ToList(); var count = results.Count; '?? –

+0

compte 3; Et si je change de requête comptée pour sélectionner 'résultat', pas de 'requête' cela fonctionne comme prévu. Mais pourquoi? – l0nley

Répondre

0

Un problème est que je n'ai pas ajouté Field to index pour le stocker et l'analyser. L'ajout de champ pour interroger et définir l'analyse sur ce champ résout le problème.