2013-01-16 27 views
5

Chức năng sau hoạt động tốt, nhưng tôi muốn nó sắp xếp kết quả trước tiên bởi parent_id, và sau đó theo thứ tự.Sắp xếp các kết quả truy vấn Slick trong một biểu thức

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) 

Làm cách nào để thực hiện điều đó bằng Slick?

Trả lời

10

Giống như bộ sưu tập thông thường?

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

Làm thế nào trực quan cú pháp tuple là ... không. Trình tự cũ quá cũ (nameThatHasMeaning, otherMeaningfulName.desc) đã không còn được dùng theo cú pháp sortBy (x => x._3 ~ x._4). Slick tác giả đã có một lý do để làm như vậy, nhưng người dùng cuối bị boilerplate và vô nghĩa đếm ra số tuple như là một kết quả. – virtualeyes

+0

Bạn có thể 'tạo ra một số cá thể kiểu chữ hoa và' getTree.sortBy (r => r.parent_id ~ r.order) ', nhưng khai báo thực tế của lớp chữ thường là một bản mẫu. Có thể đặt tên là 'Tuple'-s, với hàm tạo như' ('name1 -> value1,' name2 -> value2) 'và accessor như' apply (name: Symbol) 'sẽ hữu ích trong lõi Scala? Ví dụ: 'yield (a.id, a.label, 'parent_id -> a.parent_id,' order -> a.order, c.id.?, A = c.name)', rồi 'getTree.sortBy (r => r ('parent_id) ~ r (' thứ tự)) ' – idonnie

+0

Câu trả lời này vẫn hợp lệ cho Slick 2.1? IDEA không tìm kiếm toán tử ~. Hoặc tôi thiếu một số tuyên bố nhập khẩu ma thuật? –

1

Với Slick 2.1, tôi thấy điều này để làm việc:

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

(xác nhận bằng cách gọi selectStatement trên truy vấn của tôi)

Các vấn đề liên quan