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