Scala 如何使用带有slicks TSQL插值器的case类?

Scala 如何使用带有slicks TSQL插值器的case类?,scala,slick,Scala,Slick,sqlinterpolator允许将案例类作为给定GetResult实例的结果 val action:DBIO[Seq[VisibilityRow]] = sql"SELECT * FROM visibility".as[VisibilityRow] //compiles fine ,我没有看到将tsql与case类一起使用的示例 我决定试试看 val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility" 然而,我

sql
interpolator允许将案例类作为给定GetResult实例的结果

val action:DBIO[Seq[VisibilityRow]] = sql"SELECT * FROM visibility".as[VisibilityRow] //compiles fine
,我没有看到将
tsql
与case类一起使用的示例

我决定试试看

val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility"
然而,我得到了错误

[error] ... : type mismatch;
[error]  found   : slick.profile.SqlStreamingAction[Vector[(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp)],(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp),slick.dbio.Effect]
[error]  required: slick.driver.PostgresDriver.api.DBIO[Seq[com.fevo.slick.Schema.VisibilityRow]]
[error]     (which expands to)  slick.dbio.DBIOAction[Seq[com.fevo.slick.Schema.VisibilityRow],slick.dbio.NoStream,slick.dbio.Effect.All]
[error]     val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility"

有没有一种优雅的方法可以让我使用
tsql
提取这些类型,我可以映射到apply,但是我仍然需要相应地为
DBIO
的参数指定(并更新)元组类型。

如果case类构造函数与您的字段匹配,您可以简单地映射结果以获得所需的类型:

val action2:DBIO[Seq[VisibilityRow]] = 
  tsql"SELECT * FROM visibility".map(_.map(VisibilityRow.apply.tupled))

我不太明白你的最后一句话。您应该能够执行以下操作:
tsql“SELECT*FROM visibility”.map(u.map(VisibilityRow.apply.tuple))
。我想你是说你不想这样?是的,这是我的误解,我认为宏要成功我需要指定类型,我现在意识到(尝试你的代码)那不是真的。如果你愿意,你可以把这变成一个答案,我接受。因为我的案例类有选项(一些字段不是必需的),所以我不能直接映射到apply上,但这可能是一个全新的问题。很高兴我能帮忙!