在视图MVC 4中显示来自数据库的值的总和

时间:2016-09-04 11:09:44

标签: asp.net-mvc asp.net-mvc-4

我有一张桌子出席:

public class Attendance
    {
        public virtual int AttendanceId { get; set; }

        public virtual int UserCourseId { get; set; }
        public virtual UserCourse UserCourse { get; set; }

        public virtual int EventId { get; set; }
        public virtual Event Event { get; set; }

        public virtual int presence { get; set; } 
        public virtual bool check { get; set; }
    }

表UserCourses将用户从UserProfile与表Courses相关联:

public class UserCourse
    {
        public virtual int UserCourseId { get; set; }

        public virtual int UserId { get; set; }
        public virtual UserProfile User { get; set; }

        public virtual int CourseId { get; set; }
        public virtual Course Course { get; set; }

        public virtual List<Attendance> Attendance { get; set; }
    }

创建新的出勤时,如果检查为真,则状态变为1,如果检查为假,则变为0。我需要获得每个用户的总os存在的SUM并显示在视图中。

数据库中的示例:

User1 - Event1 - True - 1
User2 - Event1 - False - 0
User3 - Event1 - True - 1
User1 - Event2 - True - 1
User2 - Event2 - True - 1
User3 - Event2 - True - 1

因此,在视图中,它将显示在场总数:

User1 - 2
User2 - 1
User3 - 2

我该怎么做?谢谢

1 个答案:

答案 0 :(得分:0)

为了扩展@ Shyju的评论并使用您的示例数据,我把它放在一起:

var results = testData.GroupBy(user => user.UserId,
                               user => user.Attendance.Sum(a => a.presence),
                               (key, values) => "User" + key + " - " + values.First());

foreach (var result in results)
{
    System.Console.WriteLine(result);
}

var results = from user in testData
              group user.Attendance.Sum(a => a.presence) by user.UserId into result
              select "User" + result.Key + " - " + result.First();

foreach (var result in results)
{
    System.Console.WriteLine(result);
}

你应该能够进行必要的调整,以获得你想要的东西。

编辑:您应该将上面的逻辑放在模型中的方法中,并在控制器中引用它,使用它来创建类型为IEnumerable<string>的类型化视图或部分视图。要执行此操作,您将删除foreach循环,而是从方法中返回results

但是,根据您的需要,您可能会发现它更灵活,可以创建一个键入为IEnumerable<UserCourse>的视图或部分视图,然后将原始逻辑直接放在View中,如下所示:

@model IEnumerable<UserCourse>

@{
    var results = from user in Model //Notice the reference to Model instead of testData
                  group user.Attendance.Sum(a => a.presence) by user.UserId into result
                  select "User" + result.Key + " - " + result.First();
}

然后在视图的其他地方,您将能够引用results变量并在必要时输出它:

<div>
    @foreach (var result in results)
    {
        <p>@result</p>
    }
</div>