按列名对表进行排序



下午好,我想为所有表做一个通用排序。其思想是,该方法将接收列的名称作为输入,并通过反射接收到同名字段的链接。

val id = "id"
var a = JobSeekerTable::class
a.memberProperties.forEach { e ->
if (e.name == id) {
transaction {
JobSeeker.all().sortedBy { e.getter }
}
}
}

不幸的是,这不起作用。有一个选项,通过字段字段表有

JobSeekerTable.fields.forEach {v->
transaction {
JobSeeker.all().sortedBy { v }
}
}

但也不成功:(如果有任何方法可以通过名称引用所需的字段。不用if之类的东西?

首先,您可能正在寻找orderBy,而不是sortedBy。前者是对SQL查询结果进行排序,后者是对集合进行排序。

第二,你想传递一个列的实例:
val id = "id"
JobSeekerTable.selectAll().orderBy(JobSeekerTable.columns.find {
it.name == id // Here I used the name you provided, although probably it should be named something like columnName
} !!  to SortOrder.ASC)
使用">

; screaming"操作符(!!)在Kotlin是一个不好的做法。例如,如果你所有的表都有ID列,你可以使用"elvis"运营商。

JobSeekerTable.selectAll().orderBy((JobSeekerTable.columns.find {
it.name == id
} ?: JobSeekerTable.id) to SortOrder.ASC)

最新更新