2017-05-26 125 views
1

我有一个查询写的是使用光滑,它不是一个普通的光滑的查询。 查询是一个select查询,它从一个名为Employee的表中提取记录。结果类型为Employee类。如何在Slick中使用IN子句?

现在有弦乐

val nameFilter= List("Sachin","Naveen"") 

的列表,这个“nameFilter”来动态地,它可以有任意数量的名字

var result= dbHandle.db.run((query.drop(10).take(10)).result 

变量query的是只为一个选择查询雇员表,其中选择从11到20的记录范围。

现在我需要筛选名称中提到的'nameFilter'的记录,然后选择从11到20的记录。这意味着我需要一个带有'IN'子句的查询。

请注意,这不是一个普通的Slick SQL查询,我必须以上述格式框架查询。

+0

是否要对查询进行更改?或者只是过滤匹配? –

回答

2

您可以使用方法.inSet(见here)做到这一点:

油滑

油滑查询是可组合。子查询可以简单地组合,类型可以像其他任何Scala代码一样工作。

val address_ids = addresses.filter(_.city === "New York City").map(_.id) 
people.filter(_.id in address_ids).result // <- run as one query 

该方法.in期望子查询。对于内存中的Scala系列,可以使用方法.inSet代替。

因此,这将意味着你的代码:

val nameFilter= List("Sachin","Naveen") 
val filteredQuery = query.filter(_.name.inSet(nameFilter)) 
var result= dbHandle.db.run((filteredQuery.drop(10).take(10)).result 

根据该输入你应该考虑使用.inSetBind逃脱输入(见this SO post)的来源。