按列名对 table 进行排序 Exposed Kotlin
sort the table by column name Exposed Kotlin
下午好,我想对所有 table 进行通用排序。这个想法是该方法将接收列的名称作为输入,并且通过反射,我将接收到同名字段的 link。
val id = "id"
var a = JobSeekerTable::class
a.memberProperties.forEach { e ->
if (e.name == id) {
transaction {
JobSeeker.all().sortedBy { e.getter }
}
}
}
不幸的是,这不起作用。有一个选项,通过 table 具有
的字段字段
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)
在 Kotlin 中使用“尖叫”运算符 (!!
) 是一种不好的做法。因此,如果您的所有表都有 ID 列,例如,您可以改用“elvis”运算符。
JobSeekerTable.selectAll().orderBy((JobSeekerTable.columns.find {
it.name == id
} ?: JobSeekerTable.id) to SortOrder.ASC)
下午好,我想对所有 table 进行通用排序。这个想法是该方法将接收列的名称作为输入,并且通过反射,我将接收到同名字段的 link。
val id = "id"
var a = JobSeekerTable::class
a.memberProperties.forEach { e ->
if (e.name == id) {
transaction {
JobSeeker.all().sortedBy { e.getter }
}
}
}
不幸的是,这不起作用。有一个选项,通过 table 具有
的字段字段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)
在 Kotlin 中使用“尖叫”运算符 (!!
) 是一种不好的做法。因此,如果您的所有表都有 ID 列,例如,您可以改用“elvis”运算符。
JobSeekerTable.selectAll().orderBy((JobSeekerTable.columns.find {
it.name == id
} ?: JobSeekerTable.id) to SortOrder.ASC)