using System.Collections.Generic;
public static class Program
public static void Main()
List<StudentDetails> students = new List<StudentDetails>()
new StudentDetails {StudentId = 1, SubjectId = 1, ClassId = 1},
new StudentDetails {StudentId = 2, SubjectId = 2, ClassId = 1},
new StudentDetails {StudentId = 3, SubjectId = 1, ClassId = 2},
new StudentDetails {StudentId = 1, SubjectId = 3, ClassId = 2},
new StudentDetails {StudentId = 1, SubjectId = 3, ClassId = 1}
List<Class> classes = students
.GroupBy(s => s.StudentId)
.GroupBy(t => t.SubjectId)
.Select(t => new Subject { SubjectId = t.Key })
foreach (Class @class in classes)
Console.WriteLine("Class({0})", @class.ClassId);
foreach (Student student in @class.Students)
Console.WriteLine("\tStudent({0})", student.StudentId);
foreach (Subject subject in student.Subjects)
Console.WriteLine("\t\tSubject({0})", subject.SubjectId);
public class StudentDetails
public int SubjectId { get; set; }
public int StudentId { get; set; }
public int ClassId { get; set; }
public int ClassId { get; set; }
public List<Student> Students { get; set; }
public int StudentId { get; set; }
public List<Subject> Subjects { get; set; }
public int SubjectId { get; set; }