我正在使用MVC 2并显示网格。现在在这个网格的末尾,我想显示不同的统计数据,例如。
网格中的行数 一个特定列为空的行数 一个特定列中的值总和
我用来显示网格的代码部分在
下面 <% foreach (var item in Model)
{%>
<tr>
<td> <%: item.tblCourse.CourseName %></td>
<td> <%: item.NeededHoursPerWeek %> </td>
<td> <%:item.tblCourseWantedHours.Sum(x=>x.WantedHoursPerWeek)%> </td>
<td> <%: item.NeededHoursPerWeek - item.tblCourseWantedHours.Sum(x => x.WantedHoursPerWeek)%> </td>
<td>
<% foreach (var i in item.tblCourseWantedHours)
{ %>
<%: i.tblPerson.Surename %>
<% } %>
</td>
<td> <%: item.tblCourse.tblInstitute.InstituteName %> </td>
</tr>
<% } %>
我有简单的控制器
public ActionResult Index(string semester) {
var allCoursesNeedHours = _pr.FindAllCourseNeededHoursInSemester(semester);
if (allCoursesNeedHours.Count() == 0)
return View("NotFound");
return View(allCoursesNeedHours);
}
和存储库中的简单查询
public IQueryable FindAllCourseNeededHoursInSemester(string semester) { 从_db.tblCourseNeededHours中的allCourses返回allCourses.tblCourse.CourseName,其中allCourses.Semester == semester选择allCourses; }
我已经展示过的观看代码,请您指导我在哪个地方进行更改以获取这些统计数据。因为我是MVC 2的新手,所以我很难得到结果
答案 0 :(得分:0)
您可以使用LINQ的各种聚合扩展方法 - Max(), Sum(), Count(), etc。但我建议您在控制器中执行此操作,甚至更好地在业务逻辑层中执行此操作。
您可以为模型创建自定义类,并将聚合作为属性添加。 E.g。
public ActionResult SomeAction()
{
var courses = _repository.GetCourses();
var model = new YourModel(course){SomeAggregate = courses.Count(c => c.X == null)}
return View(model);
}
答案 1 :(得分:0)
你可以通过几种不同的方式做到这一点。将所需的元素添加到模型中,以便将它们绑定到计数并将其与视图一起返回,或者可以向foreach语句添加一些计数器,以跟踪所需的项目,然后将这些计数器值显示为结果。例如
var countRows = 0;
<% foreach (var i in item.tblCourseWantedHours)
{ %>
<%: i.tblPerson.Surename %>
countRows++;
<% } %>
</td>
然后在新的行显示
<td>Number of records <%= countRows %>
或者你想要称之为的任何领域。
您也可以在Controller中执行此操作,或使用Linq执行某些聚合。