我正在使用实体框架(ef),并收到以下错误:
“查询结果不能多次枚举。”
我有一个包含ef数据上下文的存储库类。然后,我有一个控制器类(不要与MVC控制器混淆),它包含存储库的一个实例。到目前为止RadComboBoxItemData一切顺利…我在控制器上有一个搜索方法,该方法应该返回的数组,该数组用于填充Telerik RadComboBox控件。
RadComboBoxItemData
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.Data.Entity.dll中发生类型为’System.InvalidOperationException’的异常,但未在用户代码中处理 附加信息:查询结果不能被多次枚举。
System.Data.Entity.dll中发生类型为’System.InvalidOperationException’的异常,但未在用户代码中处理
附加信息:查询结果不能被多次枚举。
我的实体使用现有存储过程的函数导入。
// 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。
Search
SearchItem
我有一种感觉,由于ef的影响,foreach循环无法迭代。
尝试通过调用明确枚举结果ToList()。
ToList()
更改
foreach (var item in query)
至
foreach (var item in query.ToList())