使用列索引而不是列名对Grails域列表进行排序

使用列索引而不是列名对Grails域列表进行排序,grails,gorm,Grails,Gorm,我通过我的域检索数据库中的行,代码如下: def DomainList=DomainClass.listsort:orderBy,order:asc 假设orderBy变量是一个字符串,该字符串是域的一个列的名称。但如果我想改为按列索引对其排序,该怎么办 SELECT * FROM `table` ORDER BY 2 DESC 如何在Grails上做到这一点?过了一段时间,我放弃了寻找动态解决方案。相反,我在代码开头使用if-else陷阱,因为每个索引对应于一个特定的列: def order

我通过我的域检索数据库中的行,代码如下:

def DomainList=DomainClass.listsort:orderBy,order:asc

假设orderBy变量是一个字符串,该字符串是域的一个列的名称。但如果我想改为按列索引对其排序,该怎么办

SELECT * FROM `table` ORDER BY 2 DESC

如何在Grails上做到这一点?

过了一段时间,我放弃了寻找动态解决方案。相反,我在代码开头使用if-else陷阱,因为每个索引对应于一个特定的列:

def orderBy = params?.orderBy
def orderByPolicy = params?.orderByPolicy

if(orderBy.equals("0")) {
    orderBy = "name_of_index_0_column"
}
else if(orderBy.equals("1")) {
    orderBy = "name_of_index_1_column"
}
else if(orderBy.equals("2")) {
    orderBy = "name_of_index_2_column"
}
else if(orderBy.equals("3")) {
    orderBy = "name_of_index_3_column"
}

if(!orderByPolicy?.equalsIgnoreCase("desc")) {
    orderByPolicy = "asc"
}

def DomainList = DomainClass.list(sort: orderBy, order: orderByPolicy)

但请注意,这不是动态的。它无法容纳向DomainClass添加新列;您还必须手动编辑if-else陷阱。

出于好奇,此陷阱的用例是什么?如何确保select语句中的列与您心目中的索引相关?我看不出这是如何使用/有用的。@Joshuamore起初我也是这样,但这是客户的要求。。。哦,你知道客户…@JoshuaMoore看到P.S.谢谢。orderBy可能是一个映射键,值,然后你映射。找到{it.key=input}并返回它的值。。让它少走几行。。您可能会在某个地方对索引进行硬编码,并通过引用的值引用它们,因此如果它们可用于其他服务,则etc@vahid是的,就像使用枚举一样。