我如何在 ServiceStack Ormlite 中计数(DISTINCT)?

How can I COUNT(DISTINCT) in ServiceStack Ormlite?

我正在 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),或执行等效的操作。这可能吗?

在以前的 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)));

此更改适用于现在 available on MyGet 的 v4.0.61。