2014-06-19 20 views
-3

我有一個發生在特定時間考試的名單,並通過包含在一個對象,如下爲考試學生所獲得的標記:轉化到另一個對象使用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; } 
} 

基本上我想OT顯示所有學生在達到已在particuar日發生的考試,總標記( S1 = 10,S2 = 20,總計= 30於19/06/2014) 。學生應該轉化爲學生視圖模型,以便我可以看到所有學生都參加了考試。我如何使用LINQ來做到這一點?

感謝, -Mike

注意:使用.NET4

嘗試:

exams.OrderBy(x=>x.DateTime) 
    .GroupBy(x => x.DateTime, x=> x, (d, students) => new{Date= x, Students = students.ToList()}); 

但不能得到佔總分的.. :(

+4

這對我來說看起來很直接。你有什麼嘗試?你在哪裏卡住?你有什麼困難? –

回答

1

它的清潔恕我直言,使用GroupBy與後續Select,而不是使用over包含投影的GroupBy的負載:

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