Slick: Filtering all records that have a joda date date equal to today's

One way to achieve this would be as follows:

val now = DateTime.now

val today = now.toLocalDate
val tomorrow = today.plusDays(1)

val startOfToday = today.toDateTimeAtStartOfDay(now.getZone)
val startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone)

val todayLogItems = logItems.filter(logItem =>
  logItem.MyDateTime >= startOfToday && logItem.MyDateTime < startOfTomorrow
).list

Is there a way to write a query in a more concise way? Something in the lines:

logItems.filter(_.MyDateTime.toDate == DateTime.now.toDate).list

I ask this because in LINQ to NHibernate this is achievable ( Retrieving records by date only by comparing days using nhibernate ).

+4
source share
2 answers

, LocalDateTimes, LocalDates:

val today = LocalDate.now
val todayLogItems = logItems.filter(_.MyDateTime.toLocalDate isEqual today)

UPDATE

. .

... , , filter SQL- PlainColumnExtensionMethods

, , , , , SQL. [DateTime], DateTime.

LINQ, , , ( Scala, SQL). , , , .

2 ( )

.

, , slick ​​.

. , , Scala - , , , .

Linq/NHibernate, , :

  • , SqlFunction
  • LINQ.
  • , NHibernate LINQ-...

, :

  • NHibernate, , , ( ),
  • , SQL

, NHibernate . , Slick ( slick-joda-mapper) , , , .

, ​​, , . :

  • /
  • (, )
  • SQL ( )

:

def equalsDate(dt: LocalDate) = {
  val start = dt.toDateTimeAtStartOfDay()
  val end = dt.plusDays(1).toDateTimeAtStartOfDay()
  (col: Column[DateTime]) => {
    col >= start && col < end
  }
}

val isToday = equalsDate(LocalDate.now)
val todayLogItems = logItems.filter(x => isToday(x.MyDateTime))
+2

Source: https://habr.com/ru/post/1523688/


All Articles