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


я использую Entity framework (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, но затем я получаю сообщение об ошибке:

исключение типа - Система.InvalidOperationException' произошло в системе.Данные.Сущность.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 62

3 ответа:

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

изменить

foreach (var item in query)

до

foreach (var item in query.ToList())

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

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

С

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

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

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

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

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