[英]The result of a query cannot be enumerated more than once
我正在使用實體框架 (ef) 並收到以下錯誤:
“不能多次枚舉查詢結果。”。
我有一個包含 ef 數據上下文的存儲庫 class。 然后我有一個 controller class(不要與 MVC 控制器混淆),其中包含存儲庫的一個實例。 到目前為止一切順利...我在 controller 上有一個搜索方法,它應該返回一個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.Data.Entity.dll 中出現“System.InvalidOperationException”類型的異常,但未在用戶代碼中處理
附加信息:不能多次枚舉查詢結果。
我的實體使用現有存儲過程的 function 導入。
// 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);
}
function import Search
調用存儲過程以返回SearchItem
的集合。
我有一種感覺,由於 ef 的原因,foreach 循環無法迭代。
嘗試通過調用ToList()
顯式枚舉結果。
更改
foreach (var item in query)
至
foreach (var item in query.ToList())
嘗試替換它
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=>...);
}
如果你得到這種類型的錯誤,所以我建議你像往常一樣存儲proc數據然后綁定其他控件因為我也得到這個錯誤所以我解決了它像這樣:
repeater.DataSource = data.SPBinsReport().Tolist();
repeater.DataBind();
試試這樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.