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