Преобразовать строку запроса AutoQuery в SqlExpression - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь заново создать запросы AutoQuery вне запроса на обслуживание. Я делаю это, потому что я даю пользователю возможность сохранить запрос, а затем использовать эти данные в другом месте. Я сохраняю данные строки запроса, поэтому пытаюсь создать запрос из сохраненной строки запроса.

Мне нужно 2 вещи.

1) запрос, который возвращает полные данные, не ограниченные размером страницы автозапроса по умолчанию

2) запрос, который возвращает количество

Я попытался сделать запрос следующим образом:

IAutoQueryDb _autoQuery = HostContext.TryResolve<IAutoQueryDb>();
var dto = new MyQueryDbClass();
Dictionary<string, string> pars = GetParameters();

var query = _autoQuery.CreateQuery(dto, pars);

Проблема в том, что сгенерированный запрос имеет имя таблицы объекта ответа, а не фактическую таблицу, поэтому он не работает. Также я не могу позвонить по номеру ToCountSatement(). Он также ограничен размером страницы по умолчанию.

Есть ли способ преобразовать строку запроса AutoQuery в SqlExpression, чтобы я мог выполнить ее и получить инструкцию count?

1 Ответ

0 голосов
/ 06 ноября 2018

API CreateQuery() возвращает заполненный SqlExpression<Table>, аналогичный тому, который был бы создан, если бы вручную создавал запрос, например:

SqlExpression<Table> query = _autoQuery.CreateQuery(dto, pars);

Чтобы очистить информацию о подкачке, вы можете вызвать .Limit() без аргументов, которые очистят все заполненные значения смещения / строки:

query.Limit();

Документация Custom AutoQuery docs показывает пример того, как AutoQuery выполняет запрос за кулисами, например, Вы можете получить сумму с:

var total = Db.Count(query);
...