我如何在 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。
我正在 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。