Playframework Slick DB 过滤器操作
Playframework Slick DB Filter Operation
考虑将以下两个字符串作为记录,保存在C1列中。
S1:"MyValue1 - myValue2"
S2:"MyValue1 - myValue2 - myValue3"
下面的查询将在没有任何过滤操作的情况下列出上面的字符串。
play.Logger.info("projectList: " + ((for { t <- Table } yield t).map{_.C1}.list))
问题:我想按连字符数 ('-') 过滤列表
我尝试了以下查询,但它无法正常工作
play.Logger.info("projectList: " + ((for { t <- Table if (t.C1.toString().split("-").length == someLength } yield t).map{_.C1}.list))
其中 someLength 等于 2 或 3。有没有想过在 slick DB 中使用字符串操作作为 playframework 的过滤器?
toString 不是 Slick 方法。一旦你使用它,你就离开了数据库查询的领域,并以你可能不希望的方式在客户端操作。以下是所有支持的方法:http://slick.typesafe.com/doc/2.1.0/api/#scala.slick.lifted.StringColumnExtensionMethods
你大概可以这样做:
.filter(t => (t-size - t.replace("-","").size) === someLength)
我用.filter来使用字符串操作。感谢@cvogt 的帮助。
解法:
((for { t <- Table } yield t).list.filter{ t => t.split("-").length == someLength})
考虑将以下两个字符串作为记录,保存在C1列中。 S1:"MyValue1 - myValue2" S2:"MyValue1 - myValue2 - myValue3"
下面的查询将在没有任何过滤操作的情况下列出上面的字符串。
play.Logger.info("projectList: " + ((for { t <- Table } yield t).map{_.C1}.list))
问题:我想按连字符数 ('-') 过滤列表
我尝试了以下查询,但它无法正常工作
play.Logger.info("projectList: " + ((for { t <- Table if (t.C1.toString().split("-").length == someLength } yield t).map{_.C1}.list))
其中 someLength 等于 2 或 3。有没有想过在 slick DB 中使用字符串操作作为 playframework 的过滤器?
toString 不是 Slick 方法。一旦你使用它,你就离开了数据库查询的领域,并以你可能不希望的方式在客户端操作。以下是所有支持的方法:http://slick.typesafe.com/doc/2.1.0/api/#scala.slick.lifted.StringColumnExtensionMethods
你大概可以这样做:
.filter(t => (t-size - t.replace("-","").size) === someLength)
我用.filter来使用字符串操作。感谢@cvogt 的帮助。
解法:
((for { t <- Table } yield t).list.filter{ t => t.split("-").length == someLength})