Scalaquery:按“任意”条件组合进行过滤

2024-02-10

我想加入任意长度的过滤器列表or。如果列表是固定长度的,它看起来像这样:

query.filter(filters(0) || filters(1) || … || filter(n))

连接过滤器and会很容易:

for (filter ← filters)
    query = query.filter(filter)

连接评估为的事物Booleans with or也很容易:

val any = evaluateToBools.foldLeft(true)(
    (left: Boolean, right: Eval2Bool) =>
    left || right.evaluate
)

Update:

正如我所写的,如果 scalaquery 的filter是一个标准的。不幸的是,scalaquery 只允许这些过滤器由 sql 引擎执行。

所以我的具体问题是: 如果我有一组字符串元组:

val tms = Set( ("A","a"), ("B", "b"), ... )

以及包含“t”和“m”两列的查询,

我如何生成代表以下 SQL 的过滤器:

... WHERE/AND ( (t="A" and m="a") or (t="B" and m="b") or ... )

…或者可以sqlin运算符可以与这样的元组一起使用吗?

... WHERE (t,m) IN (("A","a"), ("B","b"), ...)

如果是这样,如何在 scalaquery 中做到这一点


Hack:

目前,我执行以下操作:

val tms = markers map { tm ⇒ tm._1 +"||"+ tm._2 }
query.filter(d ⇒ d._4 ++"||"++ d._5 inSet tms)

……但这实在是太糟糕了。

Solution

我像这样实现了 Stefan 的解决方案:

rq = rq filter { d ⇒
    markers map { tm ⇒
        (d._4 is tm._1) && (d._5 is tm._2)
    } reduceLeft { _||_ }
}

实在是没什么可说的Query.filter这与组合谓词来过滤 Scala 集合有任何不同。是的,它确实有更复杂的类型:

def filter[T](f: E => T)(implicit wt: CanBeQueryCondition[T]): Query[E, U] = ...

但你可以安全地忽略CanBeQueryCondition类型类并假设T to be Column[Boolean] or Column[Option[Boolean]]只要您对所有谓词使用相同的类型(您始终可以这样做)。

那么你的类型是什么filters顺序?我想这就是你的问题所在。让我们从过滤 Scala 集合开始List[User]。这里的谓词应该具有类型User => Boolean你可以减少应用的谓词||将它们组合起来:

case class User(id: Int, name: String)

val users = List(
  User(1, "foo"),
  User(2, "bar"),
  User(3, "blub")
)

val filters = List(
  { u: User => u.id == 1 },
  { u: User => u.name == "bar" }
)

val filtered = users filter { u =>
  filters map { _(u) } reduceLeft { _ || _ }
}

现在我们为这些添加一个数据库表User对象:

class DBUsers extends Table[User]("USERS") {
  def id = column[Int]("ID")
  def name = column[String]("NAME")
  def * = id ~ name <> (User, User.unapply _)
}
object DBUsers extends DBUsers

过滤Query[DBUsers]需要类型谓词DBUsers => Column[Boolean]:

val dbFilters = List(
  { u: DBUsers => u.id === 1 },
  { u: DBUsers => u.name === "bar" }
)

组合和应用过滤器与以前完全相同:

val dbFiltered = DBUsers filter { u =>
  dbFilters map { _(u) } reduceLeft { _ || _ }
}

关于一个inSet元组方法:我认为这是一个好主意。请提交增强请求。某些数据库系统可以本机支持它,而对于其他数据库系统,可以使用此答案中概述的编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scalaquery:按“任意”条件组合进行过滤 的相关文章

  • Scala UpperBound 和 LowerBound 概念

    下面是我尝试运行的代码 class Student def printDetails println I am a student def printSomeOtherDetails println I love Studying clas
  • Scala 中的超时未来

    假设我有一个函数 它调用一个阻塞可中断的手术 我想在超时的情况下异步运行它 也就是说 我想在超时到期时中断该功能 所以我正在尝试做这样的事情 import scala util Try import scala concurrent Fut
  • 使用 Scala Slick 创建组合主键

    我正在尝试使用两列作为 Scala Slick 表的主键 这是我的表的定义方式 class NbaPlayerBoxScoreTable tag Tag extends Table NbaPlayerBoxScore tag player
  • Scala+Slick 3:将一个查询的结果插入到另一张表中

    这个问题是关于 slick 3 0 或 3 1 的 我对此很灵活 我有一个中间查询 我用它来处理map for等等以获得我想要的结果 最后我有一个 val foo DBIOAction Seq MySchema Bar NoStream E
  • 使用动画过滤 UITableViewCells - iPhone 开发

    这看起来很简单 但到目前为止我还无法找到解决方案 基本上我有一个带有两个选项的分段控件 第一个是默认值 加载时自动显示 选择后会在表视图中显示所有行 第二个是限制显示行的过滤器 这与 iPhone 电话应用程序的 最近 选项卡上使用的设置完
  • Spark SQL中如何按列降序排序?

    I tried df orderBy col1 show 10 但它是按升序排列的 df sort col1 show 10 也按升序排序 我查看了 stackoverflow 发现的答案都已过时或称为 RDD https stackove
  • Android 的互补滤波器(陀螺仪 + 加速器)

    最近我做了一些研究 使用加速度计 陀螺仪来使用这些传感器来跟踪智能手机 而无需 GPS 的帮助 请参阅这篇文章 基于陀螺仪和加速度计的室内定位系统 https stackoverflow com questions 7499959 indo
  • 为什么我的代码在 Spark Pregel 中执行需要很长时间?

    我在 Spark 中使用 Pregel 编写了处理图形的代码 但对于小数据集来说 它的执行速度非常非常慢 我以前用pregel写过程序 但是这段代码运行速度确实很慢 我的集群由 2 个工作人员组成 每个都有核心 i5 CPU 和 6 GB
  • 无法使用 Spark 结构化流在 Parquet 文件中写入数据

    我有一个 Spark 结构化流 val df spark readStream format kafka option kafka bootstrap servers localhost 9092 option startingOffset
  • Akka/Scala:映射 Future 与 pipelineTo

    In Akka参与者 在发送一个Future结果给另一个演员 A 映射Future发挥作用tell结果给演员 B 定义一个onSuccess未来的回调 其中tell结果给演员 C 管道Future结果给演员pipeTo 其中一些选项已在上一
  • scala 中的模拟案例类:Mockito

    在我的游戏应用程序中 我打算模拟一个案例类 我可以这样做 但它创建了一个所有成员变量都为空的对象 有没有办法创建案例类的模拟对象 以便该对象可以初始化一些成员 case class User name String address Stri
  • 如何通过 Scala REPL 使用第三方库?

    我已经下载了Algebird我想尝试一些事情Scala 解释器使用这个库 我该如何实现这一目标 当然 您可以使用 scala cp 无论如何并手动管理您的依赖项 但这变得非常乏味 尤其是当您有多个依赖项时 更灵活的方法是使用sbt http
  • 在 scala 中保留推导的更高类型

    我有一个高阶类型 并致力于用它构建一些 DSL 我正在寻找一种方法来定义可以接受类型而无需显式指定此类型的函数 自我描述示例 class Wrap T val data T class DSL def doSomething T x Wra
  • Scala 'null' 是否算作另一种类型的实例?

    我有这个代码 class MyLinkedList T h T tail MyLinkedList T def prepend v T MyLinkedList T new MyLinkedList v this 我想知道我如何可以将第二个
  • 手动排除sbt中的一些测试类

    我通常在 CI 中执行以下命令 清理更新编译测试发布 但是 我想从 sbt 命令行中排除 1 个 或几个 测试类 我怎样才能做到这一点 我不想更改我的代码以使用忽略等 两种可能的选择 test only See http www scala
  • Scala Sparkcollect_list() 与 array()

    有什么区别collect list and array 在 Spark 中使用 scala 我看到到处都有使用情况 但我不清楚用例来确定差异 尽管两者array https spark apache org docs latest api
  • Play框架:读取包含空值的Json

    我正在尝试在 Play Scala 程序中读取 Json 数据 Json 的某些字段可能包含空值 因此我定义 Reads 对象的方式如下 implicit val readObj Reads ApplyRequest JsPath a re
  • 用 HashMap[Int, Vector[Int]] (Scala) 表示图(邻接列表)?

    我想知道如何 如果可能的话 我可以通过以下方式制作 可变 图的邻接列表表示HashMap Int Vector Int HashMap当然是可变的 目前我将其设置为HashMap Int ArrayBuffer Int 但我可以更改 Arr
  • 使用无形类型不等式时如何自定义 Scala 模糊隐式错误

    def typeSafeSum T lt Nat W lt Nat R lt Nat x T y W implicit sum Sum Aux T W R error R 7 x typeSafeSum 3 4 compilation er
  • Scala 中缺少多重集吗?

    我正在尝试 Scala 中的 Facebook Hacker Cup 2013 资格赛问题 对于第三个问题 我觉得需要一个有序的 Multiset 但在 scala 的 2 10 集合中找不到一个 scala 的集合中是否缺少此数据结构 会

随机推荐

  • 如何在 jQuery UI Datepicker 中将 minDate 设置为当前日期?

    这是我的代码 它无法正常工作 我想设置minDate到当前日期 我该怎么做 input DateFrom datepicker changeMonth true changeYear true dateFormat yy mm dd max
  • Python:根据字典中的内容从列表中获取字典

    我需要能够在 a 中找到一个项目list 本例中的一个项目是dict 基于其中的某个值dict 的结构list我需要处理如下 title some value value 123 4 id an id title another title
  • MSTest 测试方法依赖注入

    我正在使用 DI 容器 并且想要使用从容器解析的实例进行 MSTest VS 2010 单元测试 我想将这些实例注入到我的 TestMethod 或至少是我的 TestClass 中 这可能吗 现在我的 TestMethods 直接调用co
  • 根据项目的特殊属性从列表中删除项目[重复]

    这个问题在这里已经有答案了 我有一个由我定义的项目组成的列表 每个项目都有一个属性 name t item1 item2 我想根据其属性从 t 列表中删除项目 name 如remove 或pop 方法 也许我可以做类似的事情 t remov
  • C# 从文件序列化数据契约

    我有一个 Xml 消息列表 特别是我记录到文件中的 DataContract 消息 我正在尝试将它们从文件中一一反序列化 我不想立即将整个文件读入内存 因为我预计它会很大 我有这个序列化的实现并且有效 我通过使用 FileStream 进行
  • ARCORE:通过单击此可渲染对象来删除特定的可渲染对象

    我正在开发一个使用 ARCore 的 Sceneform 的项目 我基于ARCore提供的HelloSceneform示例进行开发 我想要做的是通过点击添加一个可渲染对象 然后当我单击屏幕上的特定可渲染对象时将其删除 我已经尝试了方法 An
  • 在原生 Javascript 中查找具有类的元素的索引

    有没有办法获取类名的索引 即 类 className 的第三个元素将是 3 而不使用 jQ 我不了解jQ 而且我现在没有时间学习它 而且我不想在我的代码中包含至少一些我不理解的代码 Thanks 顺便说一句 我使用了 jQ 而不是拼写出来
  • 由 Scala 宏生成时,依赖类型似乎“不起作用”

    为这个挥手的标题道歉 我不完全确定如何简洁地表达这个问题 因为我以前从未遇到过这样的事情 背景资料 我有以下特征 其中类型U是为了举行无形可扩展记录 https github com milessabin shapeless wiki Fe
  • 我可以使用 memcpy 写入多个相邻的标准布局子对象吗?

    免责声明 这是试图深入研究一个更大的问题 所以请不要纠结于这个例子在实践中是否有意义 而且 是的 如果你想的话copy对象 请使用 提供复制构造函数 但请注意 即使该示例也不会复制整个对象 它会尝试将一些内存复制到一些相邻的 Q 2 整数上
  • 如何在 EF Code First 中对表进行单一化?

    在命名数据库表时 我更喜欢使用单数名词 然而 在 EF 代码优先中 生成的表始终是复数 我的 DbSet 是复数的 我相信这是 EF 生成名称的地方 但我不想将这些名称单数化 因为我相信在代码中使用复数名称更实用 我也尝试过覆盖该设置但无济
  • 如何在 JavaScript 中将数组的每个成员乘以标量?

    例如 我如何实现以下目标无需迭代数组 var a 1 2 3 5 a should equal 5 10 15 Array map https developer mozilla org en JavaScript Reference Gl
  • 异步 useState 导致层次结构中未定义的元素

    设置 场景 我正在使用 twitter api 来获取数据并使用 twitter 卡将其呈现反应本机社交 https github com PierreCapo react native socials 推文数据 JSON 通过我的后端存储
  • 尝试将多个函数聚合到新列时出现意外的 KeyError Pandas

    我看过以下问题 将多个函数应用于多个 groupby 列 https stackoverflow com questions 14529838 apply multiple functions to multiple groupby col
  • 单击 div 时打开文件浏览器做出反应

    我的反应组件 import React PropTypes Component from react class Content extends Component handleClick e console log Hellooww wo
  • 将时间字符串转换为日期对象[重复]

    这个问题在这里已经有答案了 我正在使用时间选择器 它需要一个日期对象 从数据库中我得到一个像 17 00 00 这样的时间字符串 如何将 17 00 00 这样的时间字符串转换为日期对象 Edit我已经尝试过 Mike C Alex K 建
  • 如何将颜色与透明度混合?

    我希望能够混合两个或多个颜色对象 假设我从半透明的红色开始 var 红色 Color FromArgb 140 255 0 0 然后我想将半透明的绿色混合到其中 var green Color FromArgb 140 0 255 0 我遇
  • Select2 - 过滤特殊字符

    我的 select2 插件有问题 当我使用过滤器并输入 m ka 时 它会找到所有带有 m ka 和 maka 单词的选项 是否可以自定义此脚本以仅查找 m ka 单词 在此预览 https i stack imgur com Cd6Wf
  • 项目欧拉问题 14 的进一步优化(Collat​​z 序列)

    当我第一次开始尝试这个问题时 我的代码需要一分多钟才能完成运行并给我答案 我已经尝试过动态编程并存储以前的数字 因此不必多次运行相同的数字 我也尝试过压缩 n3 1 和 n 2 合并成一行 n3 1 但这两者都只能将我的代码缩短到 10 秒
  • 在可移植类库中包含 XPathSelectElement

    我该如何使用XPathSelectElement在便携式类库中 当我尝试包括System Xml XPath在项目中进行汇编时 出现以下错误 类型 System Xml Linq XElement 是在未引用的程序集中定义的 您必须添加对程
  • Scalaquery:按“任意”条件组合进行过滤

    我想加入任意长度的过滤器列表or 如果列表是固定长度的 它看起来像这样 query filter filters 0 filters 1 filter n 连接过滤器and会很容易 for filter filters query quer