我有这个自动查询实现
var q = AutoQuery.CreateQuery(request, base.Request).SelectDistinct();
var results = Db.Select<ProductDto>(q);
return new QueryResponse<ProductDto>
{
Offset = q.Offset.GetValueOrDefault(0),
Total = (int)Db.Count(q),
Results = results
};
该请求具有一些联接:
public class ProductSearchRequest : QueryDb<GardnerRecord, ProductDto>
, ILeftJoin<GardnerRecord, RecordToBicCode>, ILeftJoin<RecordToBicCode, GardnerBicCode>
{
}
记录已正确返回,但总数错误。我可以在数据库中看到40,000条记录,但它告诉我有90,000条记录。每个RecordToBicCode
都有多个GardnerRecord
,因此它给了我记录数量乘以RecordToBicCode
的数量。
如何将总数与符合查询条件的GardnerRecord
的数量相匹配?
我正在使用PostgreSQL,因此需要count语句像
select count(distinct r.id) from gardner_record r etc...
OrmLite是否有办法做到这一点?
我尝试过:
var q2 = q;
q2.SelectExpression = "select count(distinct \"gardner_record\".\"id\")";
q2.OrderByExpression = null;
var count = Db.Select<int>(q2);
但是我得到对象引用未设置错误。
答案 0 :(得分:0)
对于已离开联接的查询,自动查询将返回正确的总数,因此自然会返回比原始源表更多的结果。
您可以使用以下方法执行不重复计数:
Total = Db.Scalar<long>(q.Select(x => Sql.CountDistinct(x.Id));