在ScalaQuery中的for循环条件下解包NamedColumn

在ScalaQuery中的for循环条件下解包NamedColumn,scala,scalaquery,Scala,Scalaquery,我对Scala和ScalaQuery还很陌生,现在已经用了几周了。我试图通过调用函数来找出查询中的条件,但我得到的是NamedColumn[T]而不是T,如何解包 参见第二链接,第20行: 带有typemapper的软件包: 表对象: case类MyObject( id:长, 创建:JodaTime 修改:JodaTime 特别节目:JodaTime ) 对象MyObject扩展表[MyObject](“my_对象”){ lazy val database=database.forDataSou

我对Scala和ScalaQuery还很陌生,现在已经用了几周了。我试图通过调用函数来找出查询中的条件,但我得到的是NamedColumn[T]而不是T,如何解包

参见第二链接,第20行:

带有typemapper的软件包:

表对象:

case类MyObject(
id:长,
创建:JodaTime
修改:JodaTime
特别节目:JodaTime
)
对象MyObject扩展表[MyObject](“my_对象”){
lazy val database=database.forDataSource(DB.getDataSource())
def id=列[Long](“id”,O主密钥,O自动inc,O NotNull)
def created=列[JodaTime](“已创建”,O NotNull)
def modified=列[JodaTime](“modified”,O NotNull)
def special=列[JodaTime](“special”,O NotNull)
def*=id~已创建(MyObject,MyObject.unapply)
def getMarker(time:JodaTime)=database.withSession{implicit db:Session=>
(用于{

我想你可能会被ScalaQueries漂亮的语法所欺骗。你不能在一个基于ScalaQuery表的理解中放置任意的条件

这些条件不会被JVM执行,而是被转换成SQL。这显然不适用于任意的Scala代码,而只适用于ScalaQuery提供的特殊操作

以下版本应适用:

for {
  e <- MyObjects 
  if (e.created < e.special)
  if (e.modified > e.special)
}
用于{
e.特别报告员)
}

请注意,我不知道
Interval.contains
的语义,因此您可能需要抛出一些
=
,我认为您可能会被ScalaQueries漂亮的语法所欺骗。您不能在基于ScalaQuery表的理解中放入任意条件

这些条件不会被JVM执行,而是被转换成SQL。这显然不适用于任意的Scala代码,而只适用于ScalaQuery提供的特殊操作

以下版本应适用:

for {
  e <- MyObjects 
  if (e.created < e.special)
  if (e.modified > e.special)
}
用于{
e.特别报告员)
}
请注意,我不知道
Interval.contains的语义,因此您可能需要抛出一些
=