2015-06-17 59 views
0

我試圖將查詢或操作作爲參數傳遞給方法。原因是我想對同一個表上不同查詢的結果運行相同的操作。查詢或DBIOAction的常見類型

例如:

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 fou nd:值ListItems「。

我也試圖通過行動而不是查詢來看看我是否有更多的運氣,但事實並非如此。類型相同,但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 

我如何可以通過這些查詢或操作作爲參數傳遞給一個常用的方法?

回答

1

這是一個有點硬不具有​​表的定義,但我相信你可以通過具有作爲參數類型像這樣通過這兩個查詢:

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

_在那裏應該工作,但你可以讓它通過使用適當的表格類型(例如,當您在定義中擴展它時傳遞給構造函數的那個​​)來明確。

您可以使用DBIO實現相同的功能,只需使用DBIO[YourType]作爲參數類型(其中YourType也是您在表定義中映射的類型)。

+0

啊,謝謝!通配符類型不起作用,因爲我正在訪問字段(不投射)。問題是我的類型是(Int,String,Int,Int,Boolean,String,String,String) - 自動完成似乎無法確定這一點。由於某種原因,我不認爲這是TableElementType,儘管它是完全合理的。 – Ixx