查询结果不能枚举多次

我正在使用实体框架(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();
}

当我调试我的代码时,我可以进入 foreach 循环,但是我得到一个错误说:

类型的异常 ‘ System. InvalidOperationException’ 发生在 System.Data.Entity.dll 中,但 未在用户代码中处理

附加信息: 结果 查询的枚举数不能超过 一次。

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

// 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的集合。

我感觉 foreach 循环不能迭代,因为 ef 有问题。

114348 次浏览

尝试通过调用 ToList()显式枚举结果。

改变

foreach (var item in query)

foreach (var item in query.ToList())

如果你得到这种类型的错误,所以我建议你用来存储过程数据通常列表然后绑定其他控件,因为我也得到这个错误,所以我解决了这样 例如:-

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

试试这样

试试把这个换掉

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

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

一切都会好起来的。

调用存储过程的问题代码:

var resultSP = db.StoredProcedure(id);


if (resultSP != null)
{
var count = resultSP.Count();
    

var list = resultSP.Select(x=>...);
}

固定,存储在一个变量与 ToList()和重用它:

var resultSP = db.StoredProcedure(id);


if (resultSP != null)
{
var resultSP_List = resultSP.ToList();
    

var count = resultSP_List.Count();
    

var list = resultSP_List.Select(x=>...);
}