查询的结果不能被枚举多次

我正在使用entity framework(EEF),并得到以下错误:

“查询的结果不能一次枚举”。

我有一个包含ef数据上下文的存储库类。 然后我有一个控制器类(不要与MVC控制器混淆),其中包含存储库的一个实例。 到目前为止这么好…我有一个控制器上的search方法应该返回一个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(); } 

当我debugging我的代码,我可以进入foreach循环,但后来我得到一个错误说:

在System.Data.Entity.dll中发生types“System.InvalidOperationException”的exception,但未在用户代码中处理

其他信息:查询的结果不能枚举多次。

我的实体使用现有存储过程的函数导入。

 // 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); } 

导入Search的函数调用存储过程以返回SearchItem的集合。

我有一种感觉,foreach循环无法迭代,因为与ef的东西。

尝试通过调用ToList()明确枚举结果。

更改

 foreach (var item in query) 

 foreach (var item in query.ToList()) 

尝试replace这个

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

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

一切都会好的

如果你得到这种types的错误,所以我build议你用来存储proc数据像通常的列表,然后绑定其他控件,因为我也得到这个错误,所以我解决了这个例子:

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

试试这个