El resultado de una consulta no se puede enumerar más de una vez

Estoy usando el marco de la entidad (ef) y estoy obteniendo el siguiente error:

“El resultado de una consulta no se puede enumerar más de una vez”.

Tengo una clase de repository que contiene el contexto de datos ef. Luego tengo una clase de controlador (que no debe confundirse con los controladores MVC) que contiene una instancia del repository. Hasta ahora todo bien … Tengo un método de búsqueda en el controlador que se supone que devuelve una matriz de RadComboBoxItemData , que se utiliza para poblar un control Telerik RadComboBox.

 public RadComboBoxItemData[] Search(int id, string searchText) { var query = context.Search(id, searchText); List result = new List(); 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(); } 

Cuando depuro mi código, puedo entrar al ciclo foreach, pero luego aparece un error que dice:

Se produjo una excepción del tipo ‘System.InvalidOperationException’ en System.Data.Entity.dll pero no se manejó en el código de usuario

Información adicional: el resultado de una consulta no se puede enumerar más de una vez.

Mi entidad usa una función de importación de un proceso almacenado existente.

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

La función import Search llama a un precedure almacenado para devolver una colección de SearchItem .

Tengo la sensación de que el ciclo foreach no puede iterar debido a algo con el ef.

Intente enumerar explícitamente los resultados llamando a ToList() .

Cambio

 foreach (var item in query) 

a

 foreach (var item in query.ToList()) 

Intenta reemplazar esto

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

con

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

y todo funcionará bien

si recibes este tipo de error, te sugiero que utilices los datos de proc almacenados como de costumbre, luego vincula los otros controles porque también recibo este error, así que lo resolví así: –

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

prueba así