Veamos un ejemplo:
def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] =
from(artists, songs)((a,s) =>
where(a.id === s.artistId)
groupBy(a.id)
compute(countDistinct(s.id))
)
Y esto va a devolver el siguiente query:
Select
Artist1.id as g0,
count(distinct Song2.id) as c0
From
Artist Artist1,
Song Song2
Where
(Artist1.id = Song2.artistId)
Group By
Artist1.id
Noten lo legible que queda usando closures; muy bueno. Yo estuve viendo otros frameworks de consulta a datos, dejo el link para que comparen:
Dejo links de Squeryl: