private static ClassReport MockSem2() { ClassReport cr = new ClassReport() { Id = 1, Name = "First Grade", SemesterId = 2 }; // add dummy data - in real life, this comes from database cr.Students.Add( new StudentRecord() { Id = 1, Name = "Ray", Grade = 85 }); cr.Students.Add( new StudentRecord() { Id = 2, Name = "Jack", Grade = 95 }); cr.Students.Add( new StudentRecord() { Id = 3, Name = "John", Grade = 82 }); cr.Students.Add( new StudentRecord() { Id = 4, Name = "Lisa", Grade = 95 }); cr.Students.Add( new StudentRecord() { Id = 5, Name = "Jill", Grade = 96 }); return(cr); }
static void Main(string[] args) { // Step 1 and 2: Load Student data ClassReport cr1 = MockSem1(); ClassReport cr2 = MockSem2(); var results = from sem1 in cr1.Students join sem2 in cr2.Students on sem1.Id equals sem2.Id select new { sem1.Id, sem1.Name, G1 = sem1.Grade, G2 = sem2.Grade, diff = (sem2.Grade - sem1.Grade) }; var res2 = from res in results group res by res.G2 into g let firstRecord = g.FirstOrDefault() let ID = firstRecord.Id let Name = firstRecord.Name let diff = firstRecord.diff let sum = g.Sum(x => x.diff) select new { sum = sum, Id = ID, Name = Name, Percetage = (diff * 100) / sum }; }