Asp.net mvc MVC视图-查询结果不能多次枚举

Asp.net mvc MVC视图-查询结果不能多次枚举,asp.net-mvc,razor,Asp.net Mvc,Razor,我有一个现有的存储过程,当它被调用时,它会在一个表中填充几个星期的足球比赛 然后,用户将从下拉列表中对每个装置进行预测,然后我希望使用模型绑定将所有预测插入到一起 从我的观点来看,我已经展示了下面的相关代码,这让我感到头疼: @model IEnumerable<PPLMVCNewOne.Models.sp_getMakeYourPredictions_Result> @for (int i = 0; i < Model.Count(); i++) { &l

我有一个现有的存储过程,当它被调用时,它会在一个表中填充几个星期的足球比赛

然后,用户将从下拉列表中对每个装置进行预测,然后我希望使用模型绑定将所有预测插入到一起

从我的观点来看,我已经展示了下面的相关代码,这让我感到头疼:

@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)
@model IEnumerable
@对于(int i=0;im.ElementAt(i).Home\u团队)
我试图做的是添加一个索引,这样我就可以在操作结果中建模绑定

在html帮助程序行中,我得到以下错误:

查询结果不能枚举多次


有人能给我一个指向正确方向的指针吗?

让操作通过调用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)

...
@model-IList
@对于(int i=0;im.ElementAt(i).Home\u团队)
...

您使用的是一个
IEnumerable
,当然这很好,但您需要了解您使用的是什么。枚举对于for循环之类的事情非常有用。它们经过优化,显然可以重复枚举,但优化意味着您只需要执行一次

由于枚举实际上没有“自身长度”的概念(它的构建目的是吐出一个项,直到它用完为止,仅此而已)。它可以使用
Count
,但它必须计算该值,这是计算成员总数的唯一方法,可以枚举成员并在成员经过时对其进行计数。这意味着您刚刚运行了枚举,因此for循环没有可用的内容

解决这个问题的方法是将它转换为一个不同的类型,比如list,它没有这个问题。它没有可枚举的那么有效,但是你别无选择


您可以使用
ToList()执行此操作
然后将其保存到一个var中,用于计数和for循环,或者从一开始就使用类似于
IList
ICollection
的方法来强制转换模型,而不是
IEnumerable

当我将项目列表作为IEnumerable返回时,一直出现此错误。我想手动检查如果正确的信息从数据库返回,那么,当我点击断点时,我会检查IEnumerable的内容。我不知道,直到我读到答案,我才阻止它在下面被再次枚举,也就是它被处理的地方