2013-04-11 79 views
3

我有一個現有的存儲過程,當它被調用時,用星期的足球夾具填充一個表。MVC視圖 - 查詢的結果不能枚舉超過一次

然後,用戶可以從下拉菜單中爲每個燈具做出預測,然後我希望使用模型綁定將所有預測插入到一起。

我展示了從我的觀點如下相關的代碼這是目前導致我頭疼:

@model IEnumerable<PPLMVCNewOne.Models.sp_getMakeYourPredictions_Result> 


@for (int i = 0; i < Model.Count(); i++) 
    { 
    <tr> 
     <td> 
      @Html.DisplayFor(m => m.ElementAt(i).Home_Team) 

我想要做的就是添加一個索引,所以我可以在行動結果中的模型綁定。

這是在說我發現了以下錯誤的HTML輔助線:

查詢的結果不能枚舉不止一次。

任何人都可以請給我一個正確的方向指針嗎?

回答

7

您使用的是IEnumerable,這是很好的,當然,但你需要了解你正在使用的東西。枚舉非常適合循環之類的事情。他們被優化,顯然是列舉了以上,但優化意味着你只能做到這一點一次

由於枚舉並沒有真正具有「自身長度」的概念(它的構建是吐出一個項目,直到它沒有項目,這就是全部)。它可以使用Count,但它必須計算,並計算成員的總數的唯一方法來枚舉它們並計算它們。這意味着你只需運行枚舉,所以for循環沒有任何可用的地方。

解決此問題的方法是將其轉換爲不具有此問題的不同類型,如列表。它並不像可執行的那樣高效,但你別無選擇。

你可以做到這一點使用ToList(),然後保存到您要使用的計數和for循環或者只是使用類似IList<>ICollection<>代替IEnumerable<>開始投你的模型既變種。

+0

謝謝你們倆;作品很好解釋 – Ossieboy 2013-04-12 12:00:16

+0

。 – User 2015-11-18 03:57:55

1

通過調用ToList(),該操作返回一個IList而不是IEnumerable。

更改視圖這個

@model IList<PPLMVCNewOne.Models.sp_getMakeYourPredictions_Result> 

@for (int i = 0; i < Model.Count(); i++) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(m => m.ElementAt(i).Home_Team) 

... 
0

當我收回一個IEnumerable項目列表時,我不斷收到這個錯誤。我想手動檢查是否從數據庫中返回了正確的信息,因此,當我打斷點時,我會檢查IEnumerable的內容。在我不知道的情況下,直到我讀到答案時,我才阻止它再次被列舉,它正在被處理。