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

时间:2015-06-09 08:39:51

标签: grails gorm

我使用类似于此的代码通过我的域检索我的数据库中的行:

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

假设orderBy变量是String,它是其中一个域column的名称。但是,如果我想通过列索引对其进行排序,那该怎么办:

SELECT * FROM `table` ORDER BY 2 DESC

我怎么能在Grails上做到这一点?

1 个答案:

答案 0 :(得分:0)

过了一段时间,我放弃了找到动态解决方案。相反,我在代码的开头使用了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陷阱。