2013-06-18 3 views
2

У меня есть метод, который возвращает запрос:Как я могу рассчитывать запрос от squeryl

def list:Query[User] = from(users)(u => where(u.age>20) select(u)) 

Теперь я хочу, чтобы подсчитать список, но этот метод:

list.count(_ => true) 

получите и петли все элементы в списке.

Я хочу найти решение, чтобы сделать предложение «select count» от Query[User], но еще не найдено.

Или я должен написать еще один метод для подсчета:

def countList: Long = from(users)(u => where(u.age>20) compute(count)) 

Который не то, что я хочу.

ответ

2

Попытки составить два запроса:

from(list)(_ => compute(count)) 
+0

Это не может быть скомпилирован: 'отсутствуют аргументы для метода из в FromSignatures признака; следуйте этому методу с помощью _, если вы хотите рассматривать его как частично прикладную функцию. – Freewind

+1

Вы запрашивали бы «Queryable» так же, как «Таблица», поэтому приведенный выше синтаксис выглядит более наглядным. Компилируемый код, вероятно, будет выглядеть следующим образом: 'from (list) (l => compute (count))' – jcern

0

В таких случаях, возможно, имеет смысл сделать общий конструктор запросов, так что вы можете держать условие логики в одном месте. Это удобно, когда вы выполняете поисковый запрос.

def queryBuilder[T](action: User => WhereState[Conditioned] => QueryYield[T]) : Query[T] = from(users)(u => action(u)(where(u.age>20))) 

def countQuery = queryBuilder(u => w => w.compute(count)) 

def selectQuery = queryBuilder(u => w => w.select(u)) 
0

Вот пример объекта DAO:

def countByJobPostingId(jobPostingId: Int): Long = { 
    inTransaction { 
    val q = from(table)(t => 
     where(t.jobPostingId === jobPostingId) 
     compute count 
    ) 

    LOG.debug(q.statement) 

    q.head.measures 
    } 
} 
Смежные вопросы