按照nhibernate中的集合计数排序

时间:2008-10-30 19:06:34

标签: nhibernate collections sql-order-by

有没有办法按照属性集合的对象排序对象列表?

为了论证,我们假设我有一个带有问题名称属性的问题对象,一个属性是答案对象的集合,另一个属性是用户对象的集合。用户通过问题表上的外键加入问题表,答案与中间加入表连接。

如果我想让nhibernate获取“问题”对象的列表,我可以订购它     Question.Answers.Count?

我已经使用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>();

但是我得到了

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

我已经尝试将所有属性添加到列表中,但它不起作用。然后发生的是外键userId导致与上面相同的错误,但我不能将其包含在组中,因为nhibernate将其列为

Question.Users.UserId

如果包含它不解决它。

任何想法?

2 个答案:

答案 0 :(得分:0)

我遇到了这个问题,我用Linq绕过它。

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

我相信这就是语法,如果有人可以验证那会很好我没有太多使用LINQ。

答案 1 :(得分:0)

我不能使用linq。

我解决它的方式(你可以决定它的驴)是在数据库上创建一个计算列,使用UDF计算计数。然后我将hibernate映射中的列标记为update =“false”和insert =“false”。

我现在可以正常通过这个新列排序我的查询。它给了我额外的好处,能够在我的应用程序中将它绑定到需要它的地方。

它似乎表现不错,希望它不会让我付出太多的表现。