有没有办法让两个字段排序列表,说姓氏与名字?

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

有帮助吗?

解决方案

这个老办法不再适用。请参考下面mattlary的答案

您可能需要写在HQL定制取景器,或使用标准生成器。

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"为了只会导致异常的说法,"Property 'last,first' not found"。要订购两个字段,你可以做到以下几点:

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

这是很老,但在寻找一个合适的解决方案帮助了我。通过使用withCriteria A “清洁器” 的代码示例快捷方式:

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

更复杂的排序标准,(Grails中2.1.0测试)

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

各种首先通过MyDomain.property.last然后通过MyDomain.first

此查询正在第一场的基础上。当第一字段是空则其由第二场短路。

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

我认为标准是最好的选择,但你首先尝试取景器做了正确的事情。当检索从GORM域对象,右为了使尝试是:动态取景器,标准,HQL

您可以做到这一点。

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

这行代码将首先由人的名字排序从域类“MYDOMAIN”结果第一按姓氏,然后

MyDomain.findAll(sort: ['first': 'desc','last':'desc'])

可与在grails-数据存储-GORM:6.0.3

如果你对他们的项目的内容排序列表,你需要实现这将有一定的智慧,使你决定基于多个属性的排序顺序的比较器。

Groovy的式比较器的一些实例被示出这里

然而,如果你整理被从数据库查询返回的列表,你会过得更好使用CrteriaQuery和排序上排序它

I具有相同的问题。 由于我的列表是没有那么大,我使用Groovy的排序,因为我想排序连接的域的域: 的CalendarData - >吸引

def listCalendar (Calendar calendar) {
    respond CalendarData.where {
        calendar == calendar
    }.list().sort{ "$it.attraction.type?:' '$it.attraction.name" }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top