作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有个问题几天都解决不了,
我想根据我的可选值进行动态查询。如果定义了一个值,我想查询选定的结果,否则给我 * 表的投影。由于不可能将 Lift Embedding DSL 与普通 Scala 代码混合使用以进行理解,是否有其他方法可以实现这一目标?
val x: Option[String] = Some("John")
看起来像或做事的东西
val result = for {
w <- workers if (x.isDefined) w.name === x else * projection
}
此外,是否有可能编写一个具有可选参数的函数并将它们链接到将在 WHERE 子句或条件中生成的查询中?对于可选参数的动态数量,我已经设法使用 MaybeFilter 做到了这一点,但仅适用于 AND 条件。
case class MaybeFilter[X, Y](val query: scala.slick.lifted.Query[X, Y, Seq]) {
def filteredBy(op: Option[_])(f: (X) => Column[Option[Boolean]]) = {
op map { o => MaybeFilter(query.filter(f)) } getOrElse { this }
}
}
implicit def maybeFilterConversor[X, Y](q: Query[X, Y, Seq]) = new MaybeFilter(q)
val x: Option[String] = Some("Ana")
val y: Option[String] = Some("Lemic")
val result = for { r <- radnik.filteredBy(x)(_.ime === x).filteredBy(y)(_.prz === y).query } yield r
prints out select x2.`Mbr`, x2.`Ime`, x2.`Prz`, x2.`Sef`, x2.`Plt`, x2.`Pre`, x2.`God` from `radnik` x2 where (x2.`Ime` = 'Ana') and (x2.`Prz` = 'Lemic')
我需要一个函数来链接任意数量的可选条件,如 filteredBy,但它会生成一个 OR 过滤器绑定(bind)到它以实现类似的功能
select x2.`Mbr`, x2.`Ime`, x2.`Prz`, x2.`Sef`, x2.`Plt`, x2.`Pre`, x2.`God` from `radnik` x2 where (x2.`Ime` = 'Ana') or (x2.`Prz` = Lemic') or (x2.`God` >= '1950')
像 filteredBy(someth).orFilteredBy(someth).filteredBy(someth)
提前致谢。
最佳答案
如官方所示documentation ,您可以像这样构建动态过滤条件:
val x: Option[String] = Some("Ana")
val y: Option[String] = Some("Lemic")
val result = radnik.filter { r =>
List(
x.map(radnik.ime === _),
y.map(radnik.prz === _)
).collect({case Some(criteria) => criteria}).reduceLeftOption(_ || _).getOrElse(true: Rep[Boolean])
}
关于scala - 流畅的动态可选查询或 OR 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28166579/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!