Hal*_*yon 67 c# linq asp.net entity-framework entity-framework-4
我正在使用实体框架(ef)并收到以下错误:
"查询的结果不能多次枚举."
我有一个包含ef数据上下文的存储库类.然后我有一个控制器类(不要与MVC控制器混淆),它包含一个存储库实例.到目前为止一直这么好......我在控制器上有一个搜索方法,它应该返回一个数组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();
}
Run Code Online (Sandbox Code Playgroud)
当我调试我的代码时,我可以进入foreach循环,但后来我得到一个错误说:
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);
}
Run Code Online (Sandbox Code Playgroud)
函数import Search调用存储的precedure来返回一个集合SearchItem.
我有一种感觉,foreach循环不能因为ef的某些东西而迭代.
Yak*_*ych 138
尝试通过调用显式枚举结果ToList().
更改
foreach (var item in query)
Run Code Online (Sandbox Code Playgroud)
至
foreach (var item in query.ToList())
Run Code Online (Sandbox Code Playgroud)
尝试替换它
var query = context.Search(id, searchText);
Run Code Online (Sandbox Code Playgroud)
同
var query = context.Search(id, searchText).tolist();
Run Code Online (Sandbox Code Playgroud)
一切都会好起来的.