Почему я получаю «Результат запроса не может быть перечислен более одного раза», когда я получаю Count () перед перечислением результата? - PullRequest
2 голосов
/ 28 сентября 2011

Это мой код. Упрощено для удобства чтения

var query = from p in people select p;

// here is the point that probably causes the issue
ObjectResult<int> idsThatMatch = getIdsThatMatchFullTextSearch("andre");
query = from p in query where idsThatMatch.Contains(p.id) select p;

var count = query.Count();
query = query.OrderBy(p => p.id);
var pessoas = query.Skip(90).Take(30).ToList();

Мне нужно прочитать счетчик, прежде чем пропустить / взять, чтобы получить общее количество записей перед подкачкой. Граф работает отлично. Но в последней строке моего отрывка это вызывает исключение

Результат запроса не может быть перечислен более одного раза

Почему? Кстати, граф не должен ничего перечислять. И как я могу решить это? Спасибо

EDIT

Люди думали, что я использую хранимые процедуры, но это не так. На самом деле я использую «выбрать в». Код ниже комментария.

РЕДАКТИРОВАТЬ 2

Я только что протестировал приведенный выше код без части "select in", и он отлично работает

РЕДАКТИРОВАТЬ 3

Использование этой строки работает:

ObjectResult<int> idsThatMatch = (getIdsThatMatchFullTextSearch("andre");
query = from p in query where idsThatMatch.Contains(p.id) select p).ToArray();

Спасибо

Ответы [ 2 ]

4 голосов
/ 28 сентября 2011

Проблема в этой строке:

ObjectResult<int> idsThatMatch = getIdsThatMatchFullTextSearch("andre");

Возвращает ObjectResult, а не ObjectQuery или IQueryable.Результат может быть повторен только один раз.Как только вы выполняете свой первый запрос с помощью Count, вы больше не можете использовать результат, и ваш второй запрос не будет выполнен, потому что он попытается повторить результат еще раз.

ObjectResult не обрабатывается на стороне базы данных - этоРезультат выполненного ObjectQuery и одного выполнения может иметь только одно перечисление набора результатов.Это как курсор для перебора набора результатов в вашем приложении.

1 голос
/ 28 сентября 2011

Ваши люди могут приходить из хранимой процедуры, сопоставленной с моделью Entity Framework. В этом случае вы не можете выполнять фильтрацию или пропуск по нему, так как результат уже был оценен.

Результат запроса не может быть перечислен более одного раза

Результаты запроса не могут быть перечислены более одного раза?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...