MVC视图 - 查询的结果不能枚举超过一次
我有一个现有的存储过程,当它被调用时,用星期的足球夹具填充一个表。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辅助线:
查询的结果不能枚举不止一次。
任何人都可以请给我一个正确的方向指针吗?
您使用的是IEnumerable
,这是很好的,当然,但你需要了解你正在使用的东西。枚举非常适合循环之类的事情。他们被优化,显然是列举了以上,但优化意味着你只能做到这一点一次。
由于枚举并没有真正具有“自身长度”的概念(它的构建是吐出一个项目,直到它没有项目,这就是全部)。它可以使用Count
,但它必须计算,并计算成员的总数的唯一方法来枚举它们并计算它们。这意味着你只需运行枚举,所以for循环没有任何可用的地方。
解决此问题的方法是将其转换为不具有此问题的不同类型,如列表。它并不像可执行的那样高效,但你别无选择。
你可以做到这一点使用ToList()
,然后保存到您要使用的计数和for循环或者只是使用类似IList<>
或ICollection<>
代替IEnumerable<>
开始投你的模型既变种。
通过调用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)
...
当我收回一个IEnumerable项目列表时,我不断收到这个错误。我想手动检查是否从数据库中返回了正确的信息,因此,当我打断点时,我会检查IEnumerable的内容。在我不知道的情况下,直到我读到答案时,我才阻止它再次被列举,它正在被处理。
谢谢你们俩;作品很好解释 – Ossieboy 2013-04-12 12:00:16
。 – User 2015-11-18 03:57:55