gpt4 book ai didi

scala - 异常中的 "In"子句?

转载 作者:行者123 更新时间:2023-12-03 10:28:38 26 4
gpt4 key购买 nike

在 anorm 中使用“in”子句似乎并不简单:

val ids = List("111", "222", "333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ???).as(parser *)

如何更换 ???部分?

我试过:
on('ids -> ids)
on('ids -> ids.mkString("'","','","'"))
on('ids -> ids.mkString("','")

但没有一个有效。

我在讨论中看到完全相同的问题: https://groups.google.com/d/topic/play-framework/qls6dhhdayc/discussion ,作者有一个复杂的解决方案:
val params = List(1, 2, 3) 

val paramsList = for ( i <- 0 until params.size ) yield ("userId" + i)

// ---> results in List("userId0", "userId1", "userId2")

User.find("id in ({%s})"

// produces "id in ({userId0},{userId1},{userId2})"
.format(paramsList.mkString("},{"))

// produces Map("userId0" -> 1, "userId1" -> 2, ...)
.on(paramsList.zip(params))
.list()

这太复杂了。

有没有更简单的方法?还是应该玩提供一些东西让它更容易?

最佳答案

从 2.3 开始,Anorm 现在支持这样的情况(以及更多):"Using multi-value parameter"

回到最初的例子,它给出:

val ids = Seq("111", "222", "333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ids).as(parser *)

关于scala - 异常中的 "In"子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com