Dynamic Slick是否有一种获取动态查询大小的方法?

Dynamic Slick是否有一种获取动态查询大小的方法?,dynamic,slick,Dynamic,Slick,我尝试使用slick进行查询,其中一个参数是查询返回的元素数(通常通过将参数传递到“.take”来实现)。然而,我希望这个参数是可选的(寻找像.maybeFilter这样的命令,但是寻找.take),我已经到处找了,但似乎找不到它。有人有什么建议吗?我建议捕获要运行的主查询,然后使用常规选项应用take。比如: def query(taking: Option[Int]) = { val baseQuery = table.filter(...).map(...) taking.map(

我尝试使用slick进行查询,其中一个参数是查询返回的元素数(通常通过将参数传递到“.take”来实现)。然而,我希望这个参数是可选的(寻找像.maybeFilter这样的命令,但是寻找.take),我已经到处找了,但似乎找不到它。有人有什么建议吗?

我建议捕获要运行的主查询,然后使用常规
选项应用
take
。比如:

def query(taking: Option[Int]) = {
  val baseQuery = table.filter(...).map(...)
  taking.map(size => baseQuery.take(size)) getOrElse baseQuery
}
如果您经常这样做,那么将行为封装到自己的类中(如.

动态查询过滤器)可能是有意义的

1.第一种方式(所有动态过滤器均为“和”)

2.第二条路

def selectCountByHotelIdAndStartTimeAndEndTime(
      optionHotelId: Option[String],
      rmiSerialno: Option[String],
      caseTimeFilter: Option[CaseTimeFilter[Timestamp]]
  ): Future[Int] =
    db.run(
      tableQ
        .filter { RoomReviewT: RoomReviewT =>
          optionHotelId match {
            case Some(hotelid) => RoomReviewT.hotelid === hotelid
            case None          => true: Rep[Boolean]
          }
        }
        .filter { RoomReviewT: RoomReviewT =>
          rmiSerialno match {
            case Some(rmiSerialNo) => RoomReviewT.rmiSerialno === rmiSerialNo
            case None              => true: Rep[Boolean]
          }
        }
        .filter { RoomReviewT: RoomReviewT =>
          caseTimeFilter match {
            case Some(timeFilter) =>
              RoomReviewT.createTime between (timeFilter.start, timeFilter.end)
            case None => true: Rep[Boolean]
          }
        }
        .length
        .result
    )
`

def selectCountByHotelIdAndStartTimeAndEndTime(
      optionHotelId: Option[String],
      rmiSerialno: Option[String],
      caseTimeFilter: Option[CaseTimeFilter[Timestamp]]
  ): Future[Int] =
    db.run(
      tableQ
        .filter { RoomReviewT: RoomReviewT =>
          optionHotelId match {
            case Some(hotelid) => RoomReviewT.hotelid === hotelid
            case None          => true: Rep[Boolean]
          }
        }
        .filter { RoomReviewT: RoomReviewT =>
          rmiSerialno match {
            case Some(rmiSerialNo) => RoomReviewT.rmiSerialno === rmiSerialNo
            case None              => true: Rep[Boolean]
          }
        }
        .filter { RoomReviewT: RoomReviewT =>
          caseTimeFilter match {
            case Some(timeFilter) =>
              RoomReviewT.createTime between (timeFilter.start, timeFilter.end)
            case None => true: Rep[Boolean]
          }
        }
        .length
        .result
    )