在 Mvc View 中获取查询的错误结果不能多次枚举
in Mvc View getting error result of a query cannot be enumerated more than once
在我看来,我已经通过了一个视图模型,为什么我得到了
错误
result of a query cannot be enumerated more than once
谁能帮我解决这个问题。
这是我的观点
@model App.ViewModels.ViewTeamList
<div class="row">
<div class="col-md-12 col-sm-12">
@if (Model.TeamList.Count() > 0)
{
<div class="table-responsive">
@{
var grid = new WebGrid(source: Model.TeamList.ToList(), defaultSort: "TeamName", canPage: true, rowsPerPage: 10);
}
@grid.WebGridSelectAll(
headerStyle: "gridHeader",
tableStyle: "table table-condensed table-striped table-bordered table-hover no-margin",
checkBoxValue: "TeamId",
columns: new[]{
grid.Column("TeamName",format: @<a href="#" class="details" data-id="@item.TeamId">@item.TeamName</a>,header: Html.CustomText("lblCTTeamName", "Team Name")),
grid.Column("Description",format: @<a href="#" class="details" data-id="@item.TeamId">@item.Description</a>, header: Html.CustomText("lblDescription", "Description"), canSort: false),
grid.Column("UserCount",format: @<a href="#" class="details" data-id="@item.TeamId">@item.UserCount</a>, header: Html.CustomText("lblCTUserCount", "# of User(s)"))
}
)
</div>
}
else
{
<div>No Record Found</div>
}
</div>
</div>
视图模型
public class ViewTeamList
{
public IEnumerable<TeamList> TeamList;
public Team Team { get; set; }
[Required]
public string SearchTeamName { get; set; }
}
TeamList
是一个 IEnumerable
。可枚举不同于列表,因为它的数据结构被设置为从堆栈中弹出项目。一旦一个项目被弹出,它基本上就被丢弃了,这意味着你只能 运行 通过这些项目一次。
在这里,您通过调用 .Count()
来完成此操作。为了从可枚举中获得计数,必须迭代这些项目,这会有效地用完您的枚举。然后,当您尝试通过 WebGrid
运行 它时,您会收到该错误。您要么需要将 TeamList
转换为列表并存储结果:
@{ var teamList = Model.TeamList.ToList(); }
@if (teamList.Count() > 0)
{
...
或者,可能更好,只需更改视图模型上 属性 的类型:
public List<TeamList> TeamList { get; set; }
在我看来,我已经通过了一个视图模型,为什么我得到了 错误
result of a query cannot be enumerated more than once
谁能帮我解决这个问题。
这是我的观点
@model App.ViewModels.ViewTeamList
<div class="row">
<div class="col-md-12 col-sm-12">
@if (Model.TeamList.Count() > 0)
{
<div class="table-responsive">
@{
var grid = new WebGrid(source: Model.TeamList.ToList(), defaultSort: "TeamName", canPage: true, rowsPerPage: 10);
}
@grid.WebGridSelectAll(
headerStyle: "gridHeader",
tableStyle: "table table-condensed table-striped table-bordered table-hover no-margin",
checkBoxValue: "TeamId",
columns: new[]{
grid.Column("TeamName",format: @<a href="#" class="details" data-id="@item.TeamId">@item.TeamName</a>,header: Html.CustomText("lblCTTeamName", "Team Name")),
grid.Column("Description",format: @<a href="#" class="details" data-id="@item.TeamId">@item.Description</a>, header: Html.CustomText("lblDescription", "Description"), canSort: false),
grid.Column("UserCount",format: @<a href="#" class="details" data-id="@item.TeamId">@item.UserCount</a>, header: Html.CustomText("lblCTUserCount", "# of User(s)"))
}
)
</div>
}
else
{
<div>No Record Found</div>
}
</div>
</div>
视图模型
public class ViewTeamList
{
public IEnumerable<TeamList> TeamList;
public Team Team { get; set; }
[Required]
public string SearchTeamName { get; set; }
}
TeamList
是一个 IEnumerable
。可枚举不同于列表,因为它的数据结构被设置为从堆栈中弹出项目。一旦一个项目被弹出,它基本上就被丢弃了,这意味着你只能 运行 通过这些项目一次。
在这里,您通过调用 .Count()
来完成此操作。为了从可枚举中获得计数,必须迭代这些项目,这会有效地用完您的枚举。然后,当您尝试通过 WebGrid
运行 它时,您会收到该错误。您要么需要将 TeamList
转换为列表并存储结果:
@{ var teamList = Model.TeamList.ToList(); }
@if (teamList.Count() > 0)
{
...
或者,可能更好,只需更改视图模型上 属性 的类型:
public List<TeamList> TeamList { get; set; }