如何在ServiceStack Ormlite中COUNT(DISTINCT)?

时间:2016-06-15 09:54:03

标签: ormlite-servicestack

我正在ServiceStack的OrmLite中编写分页查询,选择页面范围内的总记录和记录ID。假设query是一些任意SqlExpression选择一堆记录:

var idQuery = query.SelectDistinct(r => r.Id);
var ids = Db.Column<int>(idQuery.Skip(request.Skip).Take(request.Take));
var total = Db.Count(idQuery);

OrmLite生成两个查询,一个用于ID:

SELECT DISTINCT ...

总数为:

SELECT COUNT(*)

我正在尝试让OrmLite为总查询生成SELECT COUNT(DISTINCT Id),或者执行等效操作。这可能吗?

1 个答案:

答案 0 :(得分:2)

在以前版本的OrmLite中,您需要使用自定义SQL:

var count = db.Scalar<long>(idQuery.Select("COUNT(DISTINCT Id)"));

我刚刚添加了对Sql.CountDistinct in this commit的支持,可以让您使用Typed API:

var count = db.Scalar<long>(idQuery.Select(x => Sql.CountDistinct(x.Id)));

此更改可从v4.0.61获得,现在为available on MyGet