2012-12-26 92 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