我试图将查询或操作作为参数传递给方法。原因是我想对同一个表上的不同查询的结果运行相同的操作。
例如:
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中的ListItem导致编译器错误:"未找到:value ListItems"。
我还尝试传递操作而不是查询,看看我是否有更多的运气,但事实并非如此。类型相同,但ListItems.TableElementType仍显示错误"未找到:value 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
如何将这些查询或操作作为参数传递给常用方法?
答案 0 :(得分:1)
没有表定义有点困难,但我相信你可以通过这样的参数类型来传递两个查询:
private def findListItems(query: Query[ListItems, _, Seq]): Future[Foo] = { ... }
那里的_
应该可以工作,但是你可以通过使用你的表的正确类型(即你在定义中扩展它时传递给Table
构造函数的那个)来明确它。
您可以使用DBIO实现相同的目的,只需使用DBIO[YourType]
作为参数类型(其中YourType
是您在表定义中映射的类型)。