加入后的光滑数据需要映射以访问_._ 1._2._1等结果,还有更好的方法吗?

时间:2015-06-23 09:43:24

标签: slick

当我使用Scala Slick进行查询时,我需要映射结果以访问它们并将它们展平为()。这里的问题是连接产生了很多_._ 1._2._3._1等。有更好的方法吗?

Events.events.filter( (i: Events) => {
  ((i.isGhost === true) && (i.ghostOfEventId === groupId)) ||
  ((i.isGhost === false) && (i.id === groupId))
})
.join(ProfileEvents.profileEvents).on(_.id === _.eventId)
.join(Profiles.profiles).on(_._2.profileId === _.id)
.join(ProfileEx1s.profileEx1s).on(_._2.id === _.profileId)
.run.toList.map( (n) => {
  (n._1._1._1, // Event
    n._1._1._2, // ProfileEvent
  n._1._2, // Profile
  n._2) // ProfileEx1s
})

1 个答案:

答案 0 :(得分:1)

你可以通过理解来做到这一点:

val query = for {
  e  <- Events.events if (e.isGhost && e.ghostOfEventId === groupId) || (!e.isGhost && e.id === groupId)
  pe <- ProfileEvents.profileEvents if e.id === pe.eventId
  p  <- Profiles.profiles if pe.profileId === p.id
  px <- ProfileEx1s.profileEx1s if pe.id === px.profileId
} yield (e, pe, p, px)

query.run.toList // <- this will be of type List[(Event, ProfileEvent, Profile, ProfileEx1s)]

我可能混淆了加入条件,但你应该明白这个想法。