Ответ 1
Попробуйте явно перечислять результаты, вызывая ToList()
.
Изменить
foreach (var item in query)
к
foreach (var item in query.ToList())
Я использую структуру сущности (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.
Попробуйте явно перечислять результаты, вызывая 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();
попробуйте это