如何在Grails中的多个字段中进行sorting?

有没有办法得到两个字段sorting的名单,说最后一个名字?

我知道.listOrderByLastAndFirst.list(sort:'last, first')将无法正常工作。

这个旧的解决scheme不再有效。 请参阅下面的mattlary的答案

您可能必须在HQL中编写定制查找程序或使用Criteria Builder。

 MyDomain.find("from Domain as d order by last,first desc") 

要么

 def c = MyDomain.createCriteria() def results = c.list { order("last,first", "desc") } 

Hates_标准答案似乎并不适用于我; 把"last,first"按顺序只会引起exception,说: "Property 'last,first' not found" 。 要在两个字段上订购,您可以执行以下操作:

 def c = MyDomain.createCriteria() def results = c.list { and{ order('last','desc') order('first','desc') } } 

这是相当古老,但帮助我find一个合适的解决scheme。 使用withCriteria快捷方式的“清洁”代码示例:

 def c = MyDomain.withCriteria { and { order('last', 'desc') order('first', 'desc') } } 

这个查询是在第一个字段的基础上工作的。 当第一个字段是空白时,它被第二个字段缩短。

 order('last','desc') order('first','desc') 

更复杂的sorting标准(在Grails 2.1.0中testing)

 def c = MyDomain.withCriteria { property { order('last', 'desc') } order('first', 'desc') } 

首先由MyDomain.property.last然后由MyDomain.firstsorting

我认为一个标准是最好的select,但是你首先试图find一个发现者是正确的。 从GORM检索域对象时,正确的尝试顺序是:dynamic查找器,标准,HQL。

你可以这样做

 def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']); 

这行代码将首先按姓氏sorting,然后按人的名字sorting来自域类“MyDomain”的结果。

如果你正在对他们的项目内容进行sorting,你需要实现一个比较器,这个比较器会有一些智能,使你能够根据多个属性来决定sorting顺序。

Groovy风格的比较器的一些例子在这里显示

但是,如果您正在sorting的列表正在从数据库查询返回,则最好使用CrteriaQuery对其进行sorting,然后对其进行sorting