2017-08-04 22 views
0

我想在我的-修真迴路光滑查詢使用自定義的條件函數功能:條件爲在修真循環

def findNewsletterUsers(f: (NewsletterUsers, NewsletterStatuses) => Boolean) = { 
    for { 
     u <- NewsletterUsers 
     s <- NewsletterStatuses if (u.statusId === s.id) 
     d <- NewsletterDelays if (u.delayId === d.id) 
     if f(u, s) 
    } yield (u, d, s) 
    } 

我想調用此方法填補了實際的自定義條件上面的圖層。例如:

findNewsletterUsers((nu, ns) => ns.name == 'C') 

該調用雖然(它應該)返回沒有行。有什麼方法可以使它以這種方式工作嗎?

問候

+0

爲什麼你的'f'採取'NewsletterUsers,NewsletterStatuses'(複數)而不是'NewsletterUser,NewsletterStatus'(單數)? – dk14

+0

你的'ns.name'是'String'還是'Char'? –

+0

這些從光滑的數據庫生成模型 - 光滑代碼。它引入了案例類NewsletterStatusesRow(id:Long,name:Char,description:Option [String] = None)和類NewsletterStatuses(_tableTag:Tag)擴展了表[NewsletterStatusesRow](_tableTag,「newsletter_statuses」)和lazy val NewsletterStatuses = new TableQuery (tag => new NewsletterStatuses(tag)) – Gandalf

回答

1

一個容易犯的錯誤在光滑要提出的是使用,而不是===運營商==操作。

在你的情況下,你使用的功能(nu, ns) => ns.name == 'C')。此函數始終返回false,因爲ns.name不是Char,而是Rep[Char]

爲了解決這個問題,你只需要通過===更換==,華而不實將自動擡起文字字符'C'Rep[Char]

+0

似乎確實是邪惡的根源:)但如何解決調用呢?似乎findNewsletterUsers((nu,ns)=> ns.name === Rep ['C'])是不可能的。 – Gandalf

+0

Stick可以自動將文字轉換爲一個Rep(或實際上是一個ConstColumn)。所以你可以使用'ns.name ==='C''(三等於而不是雙)。 (也在上面的答案中更新了這個) – Wellingr

+0

工作!我需要將我的函數聲明更改爲def findNewsletterUsers(f:(NewsletterUsers,NewsletterStatuses)=> Rep [Boolean])= {,,,,並且它正在工作。感謝您的幫助! – Gandalf