在我的自动查询请求中,我指定了一个左联接,以便可以查询联接表中的属性。
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 };
分组依据似乎返回正确的结果数,因此分页有效,但Total
返回0。
我也尝试过:
var total2 = (int)Db.Count(q1);
但是,即使q1
具有GroupBy()
它也会返回结果数,包括左联接而不是实际查询
如何获得查询的真实总数?
(获得一些有关如何使用自动查询和左联接进行分页和总计的官方文档会非常有帮助,因为现在有点混乱了)