使用LINQ分组转换为另一个对象

时间:2014-06-19 14:48:36

标签: c# linq

我有一个特定时间发生的考试列表,学生为该考试获得的分数包含在下面的对象中:

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()} );

但是不能得到总分...... :(

1 个答案:

答案 0 :(得分:1)

GroupBy与后续Select一起使用,而不是使用包含投影的GroupBy重载,这是更清晰的恕我直言:

var query = 
    exams.GroupBy(x => x.DateTime)
         .Select(g => new {
                              Date = g.Key, 
                              TotalMarks = g.Sum(s => s.Mark)
                          }
                );