按列名对 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)