将自定义谓词传递给TableQuery的过滤器方法slick

问题描述 投票:0回答:1

[我正在尝试推广使用TableQuery过滤掉某些filter的功能,所以我创建了以下方法:

def fetchCoffee(coffe: String)(p: MyTable => Boolean) =
    // ...
    myTableQuery.filter(p)
    // ...

我这样称呼它:

fetchCoffee("micoffee")(_.coffeeId == id)

但是它因此错误而失败:

Error:(43, 29) inferred type arguments [Boolean] do not conform to method filter's type parameter bounds [T <: slick.lifted.Rep[_]]
    val query = MyTable.filter(p)
Error:(43, 36) type mismatch;
 found   : MyTable => Boolean
 required: MyTable => T
    val query = myTableQuery.filter(p)
Error:(43, 35) Type T cannot be a query condition (only Boolean, Rep[Boolean] and Rep[Option[Boolean]] are allowed
    val query = myTableQuery.filter(p)

我试图将p的类型更改为p: MyTable => Rep[Boolean]Rep[MyTable => Boolean],但仍然无法正常工作。我也尝试过将ExecutionContext隐式传递给fetchCoffee,但没有运气。

如何编写谓词类型以使其与绑定的T类型一致?

提前感谢。

scala slick
1个回答
0
投票

尝试使用Rep[Boolean]代替Boolean,并使用===代替==

def fetchCoffee(coffe: String)(p: MyTable => Rep[Boolean]) = {
  myTableQuery.filter(p)
}

fetchCoffee("micoffee")(_.coffeeId === id)
© www.soinside.com 2019 - 2024. All rights reserved.