2013-01-16 22 views
5

以下函數可以正常工作,但我希望它首先按parent_id排序結果,然後按順序排序。排序針對表達式中的浮動查詢結果

def getTree = for { 
    (a, c) <- Activities leftJoin Clients on (_.id === _.id_a) 
} yield (a.id, a.label, a.parent_id, a.order, c.id.?, a=c.name) 

我該如何使用Slick?

回答

10

與普通收藏一樣嗎?

getTree.sortBy(r => r._3 ~ r._4) 
+1

元組語法如何直觀的就是......不(通​​過我的分析查詢調用selectStatement驗證)。太舊的orderBy(nameThatHasMeaning,otherMeaningfulName.desc)已被廢棄,以支持sortBy(x => x._3〜x._4)語法。華而不實的作者有這樣做的理由,但最終用戶會遭受樣板和無意義數出結果的元組數。 – virtualeyes

+0

你可以'yield'某個case類的實例,'getTree.sortBy(r => r.parent_id〜r.order)',但是case類的實際聲明是一個樣板文件。也許命名'Tuple'-s,像'('name1 - > value1,'name2 - > value2)'和'apply(name:Symbol)''''''''''''''會在覈心Scala中很有用。例如:'yield(a.id,a.label,'parent_id - > a.parent_id,'order-> a.order,c.id。?,a = c.name)',然後'getTree.sortBy r => r('parent_id)〜r('order))' – idonnie

+0

這個答案對Slick 2.1仍然有效嗎? IDEA沒有找到〜運算符。或者我錯過了一些魔術導入聲明? –

1

用油滑2.1,我發現這工作:

myQuery.sortBy(r => (r._3, r._4))