如何在 ServiceStack Ormlite 中进行计数(不同)?

Seb*_*eth 3 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);
Run Code Online (Sandbox Code Playgroud)

OrmLite 生成两个查询,其中一个针对 ids:

SELECT DISTINCT ...
Run Code Online (Sandbox Code Playgroud)

总数为一:

SELECT COUNT(*)
Run Code Online (Sandbox Code Playgroud)

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

myt*_*thz 5

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

var count = db.Scalar<long>(idQuery.Select("COUNT(DISTINCT Id)"));
Run Code Online (Sandbox Code Playgroud)

我刚刚在此提交中添加了对 Sql.CountDistinct 的支持,这将允许您使用类型化 API:

var count = db.Scalar<long>(idQuery.Select(x => Sql.CountDistinct(x.Id)));
Run Code Online (Sandbox Code Playgroud)

此更改从 v4.0.61 开始提供,现已在 MyGet 上提供