Pregunta

¿Hay una manera de ordenar una lista de objetos por un conteo de una propiedad que es una colección?

Para argumentos, digamos que tengo un objeto de pregunta con una propiedad de nombre de pregunta, una propiedad que es una colección de objetos de respuesta y otra propiedad que es una colección de objetos de usuario. Los usuarios se unen a la tabla de preguntas a través de una clave externa en la tabla de preguntas y las respuestas se unen con la tabla de unión central.

Si quiero que nhibernate obtenga una lista de " pregunta " objetos podrian ordenarlo por     Pregunta. Respuestas. ¿Cuenta?

He probado el ejemplo de la documentación utilizando 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>();

pero me sale

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

He intentado agregar todas las propiedades a la lista grupo por grupo pero no funciona. Lo que sucede entonces es que el ID de usuario de la clave externa causa el mismo error que el anterior, pero no puedo incluirlo en el grupo porque nhibernate lo muestra como

Question.Users.UserId

que no lo resuelve si se incluye.

alguna idea?

¿Fue útil?

Solución 2

no puedo usar linq.

la forma en que lo resolví (y puede decidir que es burro) es crear una columna calculada en la base de datos que calcula el conteo utilizando un UDF. Luego, marqué la columna en el mapeo de hibernación como update = " false " e inserte = " falso " ;.

ahora puedo ordenar mis consultas por esta nueva columna de manera normal. Me da la ventaja adicional de poder vincular este valor en lugares donde lo necesite a través de mi aplicación.

parece funcionar bien, con suerte no me va a costar demasiado rendimiento.

Otros consejos

Me encontré con este problema y usé Linq para solucionarlo.

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

CREO que esa es la sintaxis, si alguien pudiera verificar que sería genial, no he usado LINQ demasiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top