Результат запроса не может быть перечислен более одного раза - PullRequest
65 голосов
/ 20 апреля 2011

Я использую платформу сущностей (ef) и получаю следующую ошибку:

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

У меня есть класс репозитория, который содержит контекст данных ef.Затем у меня есть класс контроллера (не путать с контроллерами MVC), который содержит экземпляр репозитория.Пока все хорошо ... У меня есть метод поиска на контроллере, который должен возвращать массив RadComboBoxItemData, который используется для заполнения элемента управления Telerik RadComboBox.

public RadComboBoxItemData[] Search(int id, string searchText)
{
    var query = context.Search(id, searchText);
    List<RadComboBoxItemData> result = new List<RadComboBoxItemData>();
    foreach (var item in query)
    {
        RadComboBoxItemData itemData = new RadComboBoxItemData();
        itemData.Text = ""; // assign some text here..;
        itemData.Value = ""; /*assign some value here..*/
        result.Add(itemData);
    }

    return result.ToArray();
}

Когда я отлаживаюкод, я могу попасть в цикл foreach, но затем я получаю сообщение об ошибке:

Исключение типа 'System.InvalidOperationException' произошло в System.Data.Entity.dll, но не было обработано вкод пользователя

Дополнительная информация: результат запроса не может быть перечислен более одного раза.

Моя сущность использует функцию импорта существующего хранимого процесса.

// EF repository method calling the function imported method on the data context.
public IEnumerable<SearchItem> Search(int id, string searchText)
{
    return this.entityContext.Search(id, searchText);
}

Функция import Search вызывает сохраненную предустановку для возврата коллекции SearchItem.

У меня такое ощущение, что цикл foreach не может повторяться из-за чего-то с ef.

Ответы [ 3 ]

137 голосов
/ 20 апреля 2011

Попробуйте явно перечислить результаты, вызвав ToList().

Изменение

foreach (var item in query)

до

foreach (var item in query.ToList())
6 голосов
/ 24 октября 2017

Попробуйте заменить

var query = context.Search(id, searchText);

на

var query = context.Search(id, searchText).tolist();

и все будет хорошо.

0 голосов
/ 15 октября 2015

если вы получаете этот тип ошибки, поэтому я предлагаю вам сохранить данные процесса как обычный список, а затем связать другие элементы управления, потому что я также получаю эту ошибку, поэтому я решил ее следующим образом например: -

repeater.DataSource = data.SPBinsReport().Tolist();
repeater.DataBind();

попробуй вот так

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