2014-07-04 24 views
2

我想在Slick查詢的where方法中添加兩個子句。我有fllowing代碼:如何使用Scala Slick 2.0在.where()子句中生成OR查詢?

val users = TableQuery[Users] 
val actions = TableQuery[Acts] 
val filteredUsers = users.where(.....) // Some condition 
val acts = actions.where(_.domain === 10) 
val ownerAct = acts.where(_.owner in filteredUsers) 
val assigneeAct = acts.where(_.assignee in filteredUsers) 

我想獲取屬於任assigneeownerer在過濾用戶的操作。我想要的代碼是這樣的:使用Scala的油滑2.0

val users = TableQuery[Users] 
val actions = TableQuery[Acts] 
val filteredUsers = users.where(.....) // Some condition 
val acts = actions.where(_.domain === 10) 

val ownerOrAssigneeAct = acts.where(_.owner in filteredUsers). 
           or(_.assignee in filteredUsers) 

怎樣才能在這樣的。凡OR查詢()?

回答

9

有幾件事情,首先使用in您的查詢必須返回,而不是

val filteredUsers = users.where(.....) 

應(從this answer採取的)東西,:

val filteredUsers = users.filter(/* condition */).map(_.id) 

假設你想匹配ID,那麼你可以簡單地使用匿名函數撰寫條件:

val ownerOrAssigneeAct = 
    acts.filter(act => act.domain === 10 && (act.owner in filteredUsers || act.assignee in filteredUsers)) 

請注意,我不使用where,因爲它已被棄用,請改用filter

+2

acts.filter(act => act.domain === 10).filter(filteredUsers中的act.owner || filteredUsers中的act.assignee))將會同樣好。 – cvogt