2012-12-26 55 views
1

我刚开始用squeryl并没有回答如何写这样的格局squeryl匹配查询

SELECT ref label 
FROM x_table 
WHERE ref like x% or lable like x% 

其中x查询是一些来自用户的价值,尤其是我还没有发现的模拟在squeryl签署%或我怎么使用它。

我的版本:

val products = from(AppDB.productTable) (
    s => where ((s.label like value) or (s.ref like value)) select(s) 
) 

不起作用正确。

val value : Option[String]我从用户那里得到。

+0

你问如何到''%字符追加到一个字符串的结尾? – aij

回答

1

您可以尝试optionize你的领域,如:

val products = from(AppDB.productTable) (s => 
    where ((Some(s.label) like value) or (Some(s.ref) like value)) 
    select(s)) 

这将汇编的查询将被比较的选项[字符串]一个选项[字符串]。 Squeryl将在内部处理选项状态。

如果你只是希望通配符添加到您比较一下,假设类似条款的两边都是类型Option[String]的,那么你可以这样做:

s.label like value.map(_ + "%") 
+0

否在这种情况下,我们得到一个erorr **像不是某些[Option [String]]的成员** ... – arussinov

+0

's.ref'是'Option [String]'而'value'是'选项[字符串]'?你最初收到的错误是什么? – jcern

+0

是的,我正在寻找如何添加通配符,所以这很好,谢谢,但它只适用于_Option [String] _,并且不会与_String_一起使用,例如对不对? – arussinov

0

您可以使用更短的版本:

AppDB.productTable.where ((s.label like value) or (s.ref like value)) 

和选项字段是空列

+0

不,如果需要获取** label **或** ref **包含** value的所有行,则必须使用通配符 – arussinov