2013-01-16 14 views
5

Aşağıdaki işlev düzgün çalışıyor, ancak sonuçları önce parent_id, sonra da sırayla sıralamak istiyorum.Slick sorgusu sonuçları için bir ifade ifadesi

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) 

Bunu Slick kullanarak nasıl yapabilirim?

cevap

10

Sıradan koleksiyonda olduğu gibi mi? Kaygan 2.1 ile

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

... değil (benim sorguya selectStatement arayarak doğrulanmış). Çok kötü eski siparişBy (nameThatHasMeaning, otherMeaningfulName.desc) sortBy (x => x._3 ~ x._4) sözdizimi lehine kullanımdan kaldırılmıştır. Kaygan yazarın bunu yapması için bir nedeni vardı, ancak son kullanıcılar sonuç olarak tuple sayısını gösterecek şekilde boilerplate ve sayısız sayımdan zarar görüyorlar. – virtualeyes

+0

Bazı vaka sınıfı örneklerini ve getTree.sortBy'yi (r => r.parent_id ~ r.order) kullanabilirsiniz, ancak büyük/küçük harf sınıfının gerçek beyanı bir yardımcı araçtır. Belki de 'Tuple'-s,' ('name1 -> value1,' name2 -> value2) 'gibi bir kurucu ile 'apply (name: Symbol)' gibi bir erişimci ise çekirdek Scalada yararlı olur mu? Örneğin: get (a.id, a.label, 'parent_id -> a.parent_id,' order -> a.order, c.id.?, A = c.name) ', sonra' getTree.sortBy (r => r ('parent_id) ~ r (' sipariş)) – idonnie

+0

Bu cevap Slick 2.1 için hala geçerli mi? IDEA, operatörü bulamıyor. Yoksa sihirli bir ithalat ifadesini kaçırıyor muyum? –

1

, ben bu işe bulundu:

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

tuple sözdizimi nasıl sezgisel