有没有办法按照属性集合的对象排序对象列表?
为了论证,我们假设我有一个带有问题名称属性的问题对象,一个属性是答案对象的集合,另一个属性是用户对象的集合。用户通过问题表上的外键加入问题表,答案与中间加入表连接。
如果我想让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
如果包含它不解决它。
任何想法?
答案 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”。
我现在可以正常通过这个新列排序我的查询。它给了我额外的好处,能够在我的应用程序中将它绑定到需要它的地方。
它似乎表现不错,希望它不会让我付出太多的表现。