Playframework Slick DB Filter操作

时间:2015-03-02 00:04:21

标签: database postgresql filter playframework slick

考虑将两个字符串作为记录,保存在C1列中。 S1:" MyValue1 - myValue2" S2:" MyValue1 - myValue2 - myValue3"

以下查询将列出上述字符串,而不进行任何过滤操作。

play.Logger.info("projectList: " + ((for { t <- Table } yield t).map{_.C1}.list))

问题:我想按字母数量过滤列表(&#39; - &#39;)

我尝试了以下查询,但它无法正常工作

play.Logger.info("projectList: " + ((for { t <- Table if (t.C1.toString().split("-").length == someLength } yield t).map{_.C1}.list))

其中 someLength 等于2或3.是否有任何想法将字符串操作用作光滑数据库中的过滤器用于播放框架?

2 个答案:

答案 0 :(得分:1)

toString不是Slick方法。一旦你使用它,你就会离开数据库查询的领域,并以你可能没想到的方式在客户端运行。以下是所有受支持的方法:http://slick.typesafe.com/doc/2.1.0/api/#scala.slick.lifted.StringColumnExtensionMethods

你可以这样做:

.filter(t => (t-size - t.replace("-","").size) === someLength)

答案 1 :(得分:0)

我使用.filter来使用字符串操作。谢谢@cvogt的帮助。

<强>解决方案:

((for { t <- Table } yield t).list.filter{ t => t.split("-").length == someLength})