Результат запроса не может быть перечислен более одного раза
я использую 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 ответа:
попробуйте явно перечислить результаты, вызвав
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();
попробуйте вот так