баг

1. По поводу проблемы с "пустыми запросами":
Как Вы уже посмотрели, строка запроса формируется по шаблону

/poisk.php?Sdelka={{ActionId}}&Type_realty={{RubricId[1]}}&Kind_realty={{RubricId[2]}}&Region={{RegionId[1]}}&City={{RegionId[2]}}&District={{RegionId[3]}}&page={{PageId}}&Sort=0

где
{{RubricId[1]}} - 1-й уровень рубрики по справочнику сайта
{{RubricId[2]}} - 2-й уровень рубрики по справочнику сайта
{{RubricId[3]}} - 3-й уровень рубрики по справочнику сайта
{{RegionId[1]}} - 1-й уровень региона по справочнику сайта
{{RegionId[2]}} - 2-й уровень региона по справочнику сайта
{{RegionId[3]}} - 3-й уровень региона по справочнику сайта
Они определяются по алгоритму
string mappingRegionId = mapping.Region[regionId];
string mappingRubricId = mapping.Rubric[rubricId];
for (long level = database.GetScalar<long, string>(mappingRegionId,
"Level", "Region", siteId);
level > 0 && !String.IsNullOrEmpty(mappingRegionId);
level = database.GetScalar<long, string>(mappingRegionId, "Level",
"Region", siteId))
{
string key = @"\{\{RegionId\[" + level + @"\]\}\}";
if (!args.ContainsKey(key)) args.Add(key, mappingRegionId);
mappingRegionId = database.GetScalar<string, string>(mappingRegionId,
"ParentId", "Region", siteId);
}
for (long level = database.GetScalar<long, string>(mappingRubricId,
"Level", "Rubric", siteId);
level > 0 && !String.IsNullOrEmpty(mappingRubricId);
level = database.GetScalar<long, string>(mappingRubricId, "Level",
"Rubric", siteId))
{
string key = @"\{\{RubricId\[" + level + @"\]\}\}";
if (!args.ContainsKey(key)) args.Add(key, mappingRubricId);
mappingRubricId = database.GetScalar<string, string>(mappingRubricId,
"ParentId", "Rubric", siteId);
}

Действительно я обнаружил в коде баг - в одном из вышеприведённы�
вызовов я указал переменную mappingRubricId вместо переменной
mappingRegionId при переходе child-parent - поэтому
{{RegionId[1]}},{{RegionId[2]}}, {{RegionId[3]}} могли:
а. либо не вычислиться,
б. либо вычислится но неправильно,
в. либо могло уйти в бесконечный цикл
Поскольку, Вы не сообщили что программа зависает на Ваших параметрах, то
остаются пункты а и б.
Значения {{RegionId[1]}} , {{RegionId[2]}} , {{RegionId[3]}} также могли
не вычислится, если был указан параметр regionId не содержащийся в
справочнике регионов

Если не вычислилось ни одно из значений
{{RubricId[1]}} - 1-й уровень рубрики по справочнику сайта
{{RubricId[2]}} - 2-й уровень рубрики по справочнику сайта
{{RubricId[3]}} - 3-й уровень рубрики по справочнику сайта
, то это означает только одно - переданный параметр rubricId отсутствует
в списке допустимых значений

Если не вычислился {{ActionId}}
, то это означает только одно - переданный параметр actionId отсутствует
в списке допустимых значений

Скорее всего, Вы даже не наткнулись на мой баг в коде программы, а для
всех трёх параметров указали величины отсутствующие в соответствующи�
справочниках, которые Вы мне присылали (rt.sqlite)
Вы можете сообщить - при каких параметрах actionId , rubricId , regionId
проводилась проверка?

2. Поскольку всё равно пришлось редактировать код, то внёс небольшие
изменения в алгоритмы

3. По поводу метода Keys:
По присланной базе у Вас
Количество действий - 24
Количество рубрик - 31
Количество регионов - 4051
4051*31*24=3013944 комбинаций
Возвращаемый размер >50Mb
Когда я сделал полный перебор, то у меня на компьютере либо всё зависало
и ответа из библиотеки я не получал, либо вываливалось по переполнению
памяти.
Поэтому я закомментировал тотальный перебор и оставил два - с
манимальными и максимальными значениями.
Может вам стоит пересмотреть идею хранить последний IdRes в разрезе все�
комбинаций?