在 Slick 3 中按日期对 table 进行排序。1.x

Sorting a table by date in Slick 3.1.x

我有以下包含日期的 Slick class:

import java.sql.Date
import java.time.LocalDate

class ReportDateDB(tag: Tag) extends Table[ReportDateVO](tag, "report_dates") {

  def reportDate = column[LocalDate]("report_date")(localDateColumnType)

  def * = (reportDate) <> (ReportDateVO.apply, ReportDateVO.unapply)

  implicit val localDateColumnType = MappedColumnType.base[LocalDate, Date](
    d => Date.valueOf(d),
    d => d.toLocalDate
  )

}

当我尝试按日期对 table 进行排序时:

    val query = TableQuery[ReportDateDB]
    val action = query.sortBy(_.reportDate).result

我得到以下编译错误

  • not enough arguments for method sortBy: (implicit evidence: slick.lifted.Rep[java.time.LocalDate] ⇒ slick.lifted.Ordered)slick.lifted.Query[fdic.ReportDateDB,fdic.ReportDateDB#TableElementType,Seq]. Unspecified value parameter evidence.

  • No implicit view available from slick.lifted.Rep[java.time.LocalDate] ⇒ slick.lifted.Ordered.

如何指定隐式默认顺序?

它应该像描述的那样工作here:

implicit def localDateOrdering: Ordering[LocalDate] = Ordering.fromLessThan(_ isBefore _)

您需要让您的 implicit val localDateColumnType 在您 运行 查询的地方可用。例如,这将起作用:

implicit val localDateColumnType = MappedColumnType.base[LocalDate, Date](
  d => Date.valueOf(d),
  d => d.toLocalDate)

val query = TableQuery[ReportDateDB]
val action = query.sortBy(_.reportDate).result

我不确定把它放在哪里最好,但我通常将所有这些转换放在一个包对象中。

尝试将此行添加到您的导入列表中:

导入slick.driver.MySQLDriver.api._