我有一张桌子出席:
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
我该怎么做?谢谢
答案 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>