Query 或 DBIOAction 的通用类型
Common type for Query or DBIOAction
我正在尝试将查询或操作作为参数传递给方法。原因是我想 运行 对同一 table.
上不同查询的结果执行相同的操作
例如:
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 导致编译器错误:"not found: value ListItems".
我也试过通过action而不是query,看看我是不是运气比较好,但事实并非如此。类型相同但 ListItems.TableElementType 仍然显示错误 "not found: 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
如何将这些查询或操作作为参数传递给通用方法?
没有 table 定义有点困难,但我相信您可以通过将类似这样的参数类型传递给这两个查询:
private def findListItems(query: Query[ListItems, _, Seq]): Future[Foo] = { ... }
那里的 _
应该可以工作,但是您可以通过使用 table 的正确类型(即您在扩展时传递给 Table
构造函数的类型来使其明确它在你的定义中)。
您可以使用 DBIO 实现相同的效果,只需使用 DBIO[YourType]
作为参数类型(再次 YourType
是您在 table 定义中映射的类型)。
我正在尝试将查询或操作作为参数传递给方法。原因是我想 运行 对同一 table.
上不同查询的结果执行相同的操作例如:
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 导致编译器错误:"not found: value ListItems".
我也试过通过action而不是query,看看我是不是运气比较好,但事实并非如此。类型相同但 ListItems.TableElementType 仍然显示错误 "not found: 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
如何将这些查询或操作作为参数传递给通用方法?
没有 table 定义有点困难,但我相信您可以通过将类似这样的参数类型传递给这两个查询:
private def findListItems(query: Query[ListItems, _, Seq]): Future[Foo] = { ... }
那里的 _
应该可以工作,但是您可以通过使用 table 的正确类型(即您在扩展时传递给 Table
构造函数的类型来使其明确它在你的定义中)。
您可以使用 DBIO 实现相同的效果,只需使用 DBIO[YourType]
作为参数类型(再次 YourType
是您在 table 定义中映射的类型)。