如何在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