查询的结果不能被枚举多次
我正在使用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();
试试这个