2012-02-13 141 views
1

我正在使用MVC 2并显示网格。现在在这个网格的最后,我想显示不同的统计信息,例如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> 
    <% } %> 

我有简单的控制器

公众的ActionResult指数(字符串学期) {

 var allCoursesNeedHours = _pr.FindAllCourseNeededHoursInSemester(semester); 


     if (allCoursesNeedHours.Count() == 0) 
      return View("NotFound"); 


     return View(allCoursesNeedHours); 
    } 

和在存储库的简单查询

公共的IQueryable FindAllCourseNeededHoursInSemester(串学期) {从_db.tblCourseNeededHours allCourses 返回ORDERBY allCourses.tblCourse.CourseName其中allCourses.Semester ==学期选择allCourses; }

查看代码我已经显示,所以你可以请指导我在哪个地方我必须做出更改以获得这些统计数据。由于我是MVC 2的新手,所以我很困惑以得到结果

回答

0

您可以使用LINQ的各种聚合扩展方法 - Max(), Sum(), Count(), etc。但我会建议在您的控制器中执行此操作,或者更好地在您的业务逻辑层中执行此操作。

您可以为您的模型创建自定义类,并将聚合添加为属性。例如。

public ActionResult SomeAction() 
{ 
    var courses = _repository.GetCourses(); 
    var model = new YourModel(course){SomeAggregate = courses.Count(c => c.X == null)} 
    return View(model); 
} 
0

您可以通过几种不同的方式来做到这一点。可以将所需的元素添加到模型中,以便将它们绑定到计数并将其返回到视图中,或者可以将一些计数器添加到您的foreach语句中,以跟踪所需的项目,然后将这些计数器值显示为结果。例如

var countRows = 0; 
<% foreach (var i in item.tblCourseWantedHours) 
{ %> 
    <%: i.tblPerson.Surename %> 
    countRows++; 
<% } %> 
</td> 

然后在新行显示

<td>Number of records <%= countRows %> 

或任何你要拨打的领域。

你也可以在控制器中执行它,或使用Linq做一些聚合。