c# - net - El resultado de una consulta no se puede enumerar más de una vez
linq entity framework c# (3)
Intenta reemplazar esto
var query = context.Search(id, searchText);
con
var query = context.Search(id, searchText).tolist();
y todo funcionará bien
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 repositorio 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 repositorio. 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<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();
}
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<SearchItem> 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())
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í