2010-01-25 6 views
0

Mon modèle est comme ceci:Obtenez des tags comme Stackoverflow avec NHibernate

Flavor 
    public IList<Mention> Mentions 

Mention 
    public IList<Flavor> Flavors 

Par conséquent, un grand nombre à plusieurs entre saveur et mention.

J'ai besoin de créer une requête qui me renvoie les saveurs mentionnées et le nombre de fois où il a été mentionné.

Aujourd'hui, je peux obtenir les termes de la requête classés par le nombre de saveurs mentionnées, mais je ne peux pas retourner le nombre de fois.

Ma requête HQL:

select flavor 
    from Flavor flavor 
    left join flavor.Mention mentions 
    group by flavor.Id, flavor.Name 
    order by count(mentions) desc 

Est-ce que quelqu'un sait comment faire cela?

Répondre

1

Essayez ceci:

var flavors = Session.CreateQuery(@"select f.Id, f.PropertyName, count(elements(f.Mentions)) 
            from Flavor f where exists elements(f.Mentions) group by f.Id, f.PropertyName").List(); 

Je crois qu'il fait le tour ...

+0

J'essaie, mais comment peut obtenir comptage (éléments (f.Mentions))? Je peux créer une propriété dans Flavor, par exemple, NumberOfMentions. Comment auto add count (éléments (f.Mentions)) dans NumberOfMentions? Merci –

+0

Le code suppose seulement que vos correspondances sont telles que vous les avez (Flavor a une propriété many-to-many appelée: Mention et Mention a une propriété many-to-many appelée: Flavors. – tolism7

+0

Je ne pense pas que je devrais encore changer de stratégie En plus d'obtenir le top de la saveur, il doit être de "mentions" de type spécifique (ex: Mention.Type = TypeMention.Question) Compliqué? –

Questions connexes