【发布时间】:2019-07-04 01:56:50
【问题描述】:
在我的 AutoQuery 请求中,我指定了一个左连接,因此我可以查询连接表中的属性。
public class ProductSearchRequest : QueryDb<Book>
, ILeftJoin<Book, BookAuthor>, ILeftJoin<BookAuthor, Author>
{}
如果我像这样使用标准的自动查询方式:
var q = AutoQuery.CreateQuery(request, base.Request);
var results = AutoQuery.Execute(request, q);
请求了 100 个,然后通常会重新调整不到 100 个,因为 Take() 是基于左连接的结果。
为了解决这个问题,我正在这样做:
var q = AutoQuery.CreateQuery(request, base.Request);
q.OrderByExpression = null //throws error if orderby exists
var total = Db.Scalar<int>(q.Select(x => Sql.CountDistinct(x.Id))); //returns 0
var q1 = AutoQuery.CreateQuery(request, base.Request).GroupBy(x => x);
var results = Db.Select<Book>(q1);
return new QueryResponse<Book>
{
Offset = q1.Offset.GetValueOrDefault(0),
Total = total
Results = results
};
group by 似乎返回正确数量的结果,因此分页有效,但 Total 返回 0。
我也试过了:
var total2 = (int)Db.Count(q1);
但即使q1 有GroupBy(),它也会返回包括左连接在内的结果数,而不是实际查询
我怎样才能得到查询的真实总数?
(获取一些关于如何使用自动查询和左连接进行分页和总计的官方文档将非常有帮助,因为现在它有点令人困惑)
【问题讨论】:
标签: servicestack