Question

Existe-t-il un moyen de classer une liste d'objets en comptant le nombre de propriétés constituant une collection?

Par exemple, supposons que j’ai un objet de question avec une propriété de nom de question, une propriété qui est une collection d’objets de réponse et une autre propriété qui est une collection d’objets d’utilisateur. Les utilisateurs rejoignent la table de questions via une clé étrangère sur la table de questions et les réponses sont jointes avec la table de jonction intermédiaire.

Si je veux que nhibernate reçoive une liste de "question" objets pourrais-je commander par     Question.Answers.Count?

J'ai essayé l'exemple de la documentation en utilisant HQL:

 List<Question> list = nhelper.NHibernateSession
        .CreateQuery("Select q from Question q left join q.Answers a group by q,a order by count(a)")
        .List<Question>();

mais je reçois

"column Question.Name is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause" 

J'ai essayé d'ajouter toutes les propriétés à la liste groupe par, mais cela ne fonctionne pas. Ce qui se passe alors, c’est que la clé étrangère userId provoque la même erreur que ci-dessus mais je ne peux pas l’inclure dans le groupe en tant que nhibernate le liste comme

.
Question.Users.UserId

qui ne le résout pas s'il est inclus.

des idées?

Était-ce utile?

La solution 2

Je ne peux pas utiliser linq.

La façon dont je l'ai résolu (et vous pouvez décider que c'est un âne) est de créer une colonne calculée sur la base de données qui calcule le nombre à l'aide d'un fichier UDF. J'ai ensuite marqué la colonne dans le mappage hibernate comme update = " false " et insérer = "faux".

Je peux maintenant classer mes requêtes par cette nouvelle colonne comme d'habitude. Cela me donne l’avantage supplémentaire de pouvoir lier cette valeur là où elle en a le plus besoin dans l’application.

ça semble bien fonctionner, j'espère que ça ne va pas me coûter trop cher.

Autres conseils

J'ai rencontré ce problème et j'ai utilisé Linq pour le contourner.

            var sort = from n in c
                       orderby q.Answers.Count
                       select n;

Je crois que c'est la syntaxe. Si quelqu'un pouvait vérifier que ce serait formidable, je n'ai pas trop utilisé LINQ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top