MVC 2 =计数和其他统计

时间:2012-02-13 14:02:59

标签: linq-to-sql asp.net-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>
    <% } %> 

我有简单的控制器

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的新手,所以我很难得到结果

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执行某些聚合。