AutoQuery / OrmLite неверное общее значение при использовании объединений - PullRequest
1 голос
/ 23 июня 2019

У меня есть эта реализация автозапроса

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...

У Dores OrmLite есть способ сделать это?

Я пытался:

            var q2 = q;
            q2.SelectExpression = "select count(distinct \"gardner_record\".\"id\")";
            q2.OrderByExpression = null;
            var count = Db.Select<int>(q2);

Но я получаю ссылку на объект, а не установленную ошибку.

1 Ответ

0 голосов
/ 24 июня 2019

AutoQuery возвращает правильное общее количество для вашего запроса, для которого осталось соединение, поэтому, естественно, будет возвращать больше результатов, чем исходная таблица.

...