【问题标题】:MVC 2 = Counting and other StatisticsMVC 2 = 计数和其他统计
【发布时间】:2012-03-04 22:22:46
【问题描述】:

我正在使用 MVC 2 并显示一个网格。现在在这个网格的末尾,我想显示不同的统计信息,例如

网格中的行数 一个特定列为 Null 的行数 某一特定列中的值的总和

我用来显示网格的代码部分如下

 <% 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(字符串学期) {

       var allCoursesNeedHours = _pr.FindAllCourseNeededHoursInSemester(semester);


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


        return View(allCoursesNeedHours);
    }

和一个简单的存储库查询

public IQueryable FindAllCourseNeededHoursInSemester(字符串学期) { 从 _db.tblCourseNeededHours orderby allCourses.tblCourse.CourseName 中的 allCourses 返回,其中 allCourses.Semester == term select allCourses; }

我已经显示了查看代码,请指导我在哪个地方进行更改以获取这些统计信息。由于我是 MVC 2 的新手,所以我很困惑得到结果

【问题讨论】:

    标签: linq-to-sql asp.net-mvc-2


    【解决方案1】:

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

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

    然后在新的一行显示

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

    或者任何你想调用的字段。

    您也可以在 Controller 中执行此操作,或使用 Linq 进行一些聚合。

    【讨论】:

      【解决方案2】:

      您可以为 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);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 2016-09-15
        • 2017-06-05
        • 2022-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多