2

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

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

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

list.count(_ => true)

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

我想找到一种解决方案来从 中进行“选择计数”语句Query[User],但尚未找到。

或者我必须编写另一种计数方法:

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

这不是我想要的。

4

3 回答 3

2

尝试组合这两个查询:

from(list)(_ => compute(count))
于 2013-06-18T08:32:12.570 回答
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))
于 2015-04-02T14:33:04.997 回答
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
  }
}
于 2015-05-26T19:18:47.350 回答