Scala 转换/重新打包平滑查询的结果

Scala 转换/重新打包平滑查询的结果,scala,slick,Scala,Slick,我有一个关于斯里克的简单问题。抱歉,如果这是很好的记录-我可能忽略了我的搜索中的一些东西 我创建了一个聚合查询,如下所示: def doQuery(/* ... */) = for { a <- Query(TableA) b <- a.relationship.where // ... c <- b.relationship.where // ... } yield (a, b, c) 我想将我的查询转换为一个query[Aggregate],这样我的开发伙伴可

我有一个关于斯里克的简单问题。抱歉,如果这是很好的记录-我可能忽略了我的搜索中的一些东西

我创建了一个聚合查询,如下所示:

def doQuery(/* ... */) = for {
  a <- Query(TableA)
  b <- a.relationship.where // ...
  c <- b.relationship.where // ...
} yield (a, b, c)
我想将我的查询转换为一个
query[Aggregate]
,这样我的开发伙伴可以调用
.list()
.firstOption()
,并根据需要获得一个
列表
选项

我自然选择了
查询
上的
.map()
方法,但它有一个隐式
形状
参数,我不确定如何处理

这是不是很简单?目前我们正在使用v1.0.1,但也有可能升级到2.0

致以最良好的祝愿


Dave

如果您可以修改
doQuery
,那么您只需要执行
收益率聚合(a,b,c)
,而不是
收益率(a,b,c)


或者,如果您想在不修改
doQuery
的情况下转换结果,那么您可以调用
.map{case(a,b,c)=>Aggregate(a,b,c)}
doQuery

的结果执行大量操作后,我得出结论,这在Slick 1中是不可能的

在Slick 2中,您可以使用
操作符变换集合在屈服部分的投影,以便于理解:

def doQuery(/* ... */) = for {
  a <- Query(TableA)
  b <- a.relationship.where // ...
  c <- b.relationship.where // ...
} yield (a, b, c) <> (Aggregate.tupled, Aggregate.unapply)
def doQuery(/*…*/)=for{

a恐怕这行不通。从中提取的用于理解的查询单子的值实际上是表别名,而不是从查询结果中解析的记录。为清楚起见,请另外注意……您的解决方案在调用查询上的
.list
.firstOption
后将起作用。此时,您正在处理一个查询结果
列表
选项
查询
相反,因此所有操作都完全符合预期。
def doQuery(/* ... */) = for {
  a <- Query(TableA)
  b <- a.relationship.where // ...
  c <- b.relationship.where // ...
} yield (a, b, c) <> (Aggregate.tupled, Aggregate.unapply)