如何从squeryl计算查询

时间:2013-06-18 08:05:24

标签: scala squeryl

我有一个返回查询的方法:

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

现在我要计算列表,但这个方法:

list.count(_ => true)

将获取并循环列表中的所有元素。

我想找到一个解决方案来制作Query[User]的“选择计数”声明,但尚未找到。

或者我必须为count计算另一种方法:

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

这不是我想要的。

3 个答案:

答案 0 :(得分:2)

尝试撰写两个查询:

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

答案 1 :(得分: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))

答案 2 :(得分: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
  }
}
相关问题