构造函数不能实例化Slick Scala [英] Constructor can not be instantiated Slick Scala

查看:0
本文介绍了构造函数不能实例化Slick Scala的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用SLICK将查询从SQL转换为Scala代码,但在筛选子句中遇到编译器错误:构造函数无法实例化为预期类型

我的SLICK代码:

val subquery = (for {
      pit <- PassInTripTable.table
      t <- TripTable.table if pit.tripNoFk === t.tripNo
    } yield (pit, t))
        .map{ case (pit, t) => ( pit, Case.If(t.townFrom <= t.townTo).Then(t.townFrom ++ t.townTo).Else(t.townFrom ++ t.townTo) )}
          .groupBy(_._1.idPsgFk)
            .filter{ case ((pit, count), group) => ( group.map(_._2).countDistinct === 1)}
                .map(_._1)
    val query = PassengerTable.table.filter(_.idPsg in subquery).map(_.name)
    db.run(query.result)

SQL本身的查询:

select name from passenger
        where id_psg in
        (
          select id_psg from trip t,pass_in_trip pit
          where t.trip_no=pit.trip_no
          group by id_psg
          having count(distinct case when town_from<=town_to then town_from+town_to else town_to+town_from end)=1
        )

如果有人帮我找出错误,我将不胜感激。

推荐答案

从您的代码可以看出,您匹配的类型不应该是"((PIT,COUNT),GROUP)"。

Slick中的groupBy仅返回Tuple2的集合。

http://slick.lightbend.com/doc/3.0.0/queries.html

因此,筛选器可能类似于...

.filter{ case (pit, count) => ( count.map(_._2).countDistinct === 1)}

这篇关于构造函数不能实例化Slick Scala的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆