scala – 如何从运行时参数指定SLICK Query sortBy列?
发布时间:2020-12-16 21:31:06 所属栏目:安全 来源:网络整理
导读:我有以下SLICK查询来获取数据表的分页结果,其名称字段匹配某些值标准,并按名称列排序 val q = ThirdParties.where(_.name like criteria).sortBy(_.name.asc.nullsLast).drop(offset).take(pageSize)val thirdParties = (for(s -q) yield(s)).list map { cas
我有以下SLICK查询来获取数据表的分页结果,其名称字段匹配某些值标准,并按名称列排序
val q = ThirdParties.where(_.name like criteria).sortBy(_.name.asc.nullsLast).drop(offset).take(pageSize) val thirdParties = (for(s <-q) yield(s)).list map { case t: ThirdParty => t } 这对我来说可以正常工作,但现在我需要能够将运行时参数传递给sortBy方法,该方法标识要执行排序的列. 我如何从int列索引到sortBy方法所需的必需类型? 解决方法
通过这样做,您将失去一些类型的安全性,但也许这样做会伤害至少:
这是来自Slick文档的咖啡示例.我们假设你 object Coffees extends Table[(String,Int,Double,Int)]("COFFEES") { def name = column[String]("COF_NAME",O.PrimaryKey) def supID = column[Int]("SUP_ID") def price1 = column[Double]("PRICE1") def price2 = column[Double]("PRICE2") def sales = column[Int]("SALES") def total = column[Int]("TOTAL") def * = name ~ supID ~ price1 ~ price2 ~ sales ~ total def nth = Vector(price1,price2,sales) // Your index-addressable columns } 这里Coffees.nth是Int和Double之间的列的向量. scala> Coffees.nth scala.collection.immutable.Vector[scala.slick.lifted.Column[_ >: Int with Double <: AnyVal]] = Vector(COFFEES.PRICE1,COFFEES.PRICE2,COFFEES.SALES) 当然,在运行时选择列排序,这意味着你必须处理 如果你有一个虚假的列索引的例外,那么(回到你的例子) def q(colIndx: Int) = ThirdParties.where(_.name like criteria). sortBy(_.nth(colIndx).asc.nullsLast). drop(offset).take(pageSize) 然后调用查询 val colIndx: Int = // gotten at runtime val thirdParties = (for(s <-q(colIndx)) yield(s)).list map { case t: ThirdParty => t } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |