0

我正在尝试将查询或操作作为参数传递给方法。原因是我想对同一张表上不同查询的结果运行相同的操作。

例如:

val query1 = listItems   
val query2 = listItems.filter { x => x.id===1 }

还有我的方法:

private def findListItems(query: Query[???]): Future[Foo] = {  ... }

轮流我不能只传递 query1 或 query2 因为它们有不同的类型(这是我的 ide 自动完成的):

val query1: TableQuery[ListItems] = listItems
val query2: Query[ListItems, ListItems.TableElementType, Seq] = listItems.filter(_.listId===1)

此外,ListItems.TableElementType 中的 ListItems 会导致编译器错误:“未找到:值 ListItems”。

我还尝试通过操作而不是查询来查看我是否有更多的运气,但事实并非如此。类型相同,但 ListItems.TableElementType 仍然显示错误“未找到:值 ListItems”。

val action1: DBIOAction[Seq[ListItems.TableElementType], ListItems.TableElementType, Effect.Read] = query1.result 
val action2: DBIOAction[Seq[ListItems.TableElementType], ListItems.TableElementType, Effect.Read] = query2.result

如何将这些查询或操作作为参数传递给常用方法?

4

1 回答 1

1

没有表定义有点困难,但我相信您可以通过将这两个查询作为参数类型来传递,如下所示:

private def findListItems(query: Query[ListItems, _, Seq]): Future[Foo] = {  ... }

_那里应该可以工作,但是您可以通过使用表的正确类型(即Table在定义中扩展它时传递给构造函数的那个​​)来使其明确。

您可以使用 DBIO 实现相同的目的,只需将DBIO[YourType]其用作参数类型(其中再次YourType是您在表定义中映射的类型)。

于 2015-06-17T15:53:17.210 回答