Переполнение стека LINQ, выбирая много - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть сценарий, в котором у меня есть таблица «batch» и таблица «test», где «test» содержит FK для «batch», и многие тесты могут принадлежать к пакету.

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

var ret =
from t in tests 
from b in indices //indices is a list of long PK's belonging to selected batches
where t.batch_id == b
select t;

Это работает, но когда мой размер выделения превышает 14 пакетов, я получаю сообщение об ошибке SQLite Переполнение стека синтаксического анализатора "в выражении LINQ независимо от того, сколько тестов найдено.

Я хочу иметь возможность обрабатывать большие выборки, если это возможно. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Если запрос JeffN825 не решит вашу проблему, и я бы дал на это высокую оценку, вам, возможно, придется скомпилировать собственный SQLite и установить для значения -DYYSTACKDEPTH значение больше значения по умолчанию.Так что вам нужно будет выяснить, на что он был установлен, а затем, возможно, удвоить его и перейти оттуда.Полная строка, которую вы бы пропустили: CFLAGS="-DYYSTACKDEPTH=1000", изменив 1000 на то, насколько вы хотите, чтобы стек был.

0 голосов
/ 02 декабря 2010

Возможно, провайдер LINQ взорван, потому что он пытается выдать 1 запрос на индекс. Вы можете проверить это (если SQL фактически генерируется вообще), профилируя БД и проверяя, действительно ли он выдает 1 запрос на индекс.

Попробуйте вместо этого:

var ret =
from t in tests 
where indices.Contains(t.batch_id)
select t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...