Squeryl:如何对可选属性进行不区分大小写的搜索?

时间:2014-12-04 13:01:40

标签: scala squeryl

我遇到了以下问题。

我的搜索方法很好用:

override def search(code: Option[String], 
                title: Option[String], 
                employmentStatusCd: Option[Int], 
                employerId: Int) = MDB {
    from(table)((p) =>
      where(
        (p.code like code.map(v => s"%$v%").?)
          and (p.title like title.map(v => s"%$v%").?)
          and (p.employmentStatusCd === employmentStatusCd.?)
          and (p.employerId === employerId))
        .select(p)
    ).toList
}

如何改进它以使搜索处理不区分大小写? 我知道我可以使用lower(...),例如:

(lower(pos.title) like lower(s"%$value%"))

但是在这个例子中,属性' title'不是可选的。如何组合可选属性

(title.map(v => s"%$v%").?)

使用lower(...)使搜索不区分大小写?

如果我写下一个,我会得到一个例外:

lower(title.map(v => s"%$v%").?)

1 个答案:

答案 0 :(得分:0)

感谢 jcern 澄清。

正确的方法是:

override def search(code: Option[String], 
            title: Option[String], 
            employmentStatusCd: Option[Int], 
            employerId: Int) = MDB {
    from(table)((p) =>
      where(
        (lower(p.code) like code.map(v => s"%${v.toLowercase}%").?)
          and (lower(p.title) like title.map(v => s"%${v.toLowercase}%").?)
          and (p.employmentStatusCd === employmentStatusCd.?)
          and (p.employerId === employerId))
        .select(p)
    ).toList
}

我们不需要使用服务器函数来使常量字符串小写。