2

有没有办法通过一个集合的属性计数来排序对象列表?

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

如果我想让 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

如果包含它并不能解决它。

有任何想法吗?

4

2 回答 2

0

我遇到了这个问题,我使用 Linq 来解决它。

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

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

于 2008-10-30T19:28:17.890 回答
0

我不能使用 linq。

我解决它的方法(你可能会认为它是驴)是在数据库上创建一个计算列,使用 UDF 计算计数。然后我将休眠映射中的列标记为 update="false" 和 insert="false"。

我现在可以像往常一样按这个新列排序我的查询。它给了我额外的好处,即能够在我的应用程序中需要它的地方绑定这个值。

它似乎表现不错,希望它不会花费我太多的表现。

于 2008-10-31T15:54:45.227 回答