我有一个特定时间发生的考试列表,学生为该考试获得的分数包含在下面的对象中:
class Exam
{
public DateTime? DateTime { get; set; }
public double? Mark { get; set; }
public string Student { get; set; }
public int Age { get; set; }
}
我需要使用以下结构将其转换为另一种显示格式:
class ExamViewModel
{
public DateTime? DateTime { get; set; }
public double? Mark { get; set; }
List<StudentVieWModel> Students { get; set; }
}
class StudentVieWModel
{
public string Student { get; set; }
public int Age { get; set; }
}
class ResultViewModel
{
List<ExamViewModel> Exams { get; set; }
}
基本上我想要的显示是在特定日期进行的考试,以及所有学生在该考试中取得的总分(S1 = 10,S2 = 20,总分= 30于2014年6月19日) 。应该将学生转换为学生视图模型,以便我可以看到所有学生都参加了考试。我怎么能用LINQ做到这一点?
谢谢, -Mike
注意:使用.NET4
尝试:
exams.OrderBy(x=>x.DateTime)
.GroupBy(x => x.DateTime, x=> x, (d, students) => new{Date= x, Students = students.ToList()} );
但是不能得到总分...... :(
答案 0 :(得分:1)
将GroupBy
与后续Select
一起使用,而不是使用包含投影的GroupBy
重载,这是更清晰的恕我直言:
var query =
exams.GroupBy(x => x.DateTime)
.Select(g => new {
Date = g.Key,
TotalMarks = g.Sum(s => s.Mark)
}
);