使用列索引而不是列名对 Grails 域列表进行排序
Sort a Grails Domain list using a column index instead of column name
我使用与此类似的代码通过我的域检索我的数据库中的行:
def DomainList = DomainClass.list(sort: orderBy, order: "asc")
假设 orderBy
变量是一个 String
,它是其中一个域的名称 column
。但是,如果我想按列索引对其进行排序怎么办:
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
陷阱。
我使用与此类似的代码通过我的域检索我的数据库中的行:
def DomainList = DomainClass.list(sort: orderBy, order: "asc")
假设 orderBy
变量是一个 String
,它是其中一个域的名称 column
。但是,如果我想按列索引对其进行排序怎么办:
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
陷阱。