using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
var algebra = new Course() { Id = Guid.NewGuid(), Name = "Algebra" };
var chemistry = new Course() { Id = Guid.NewGuid(), Name = "Chemistry" };
var english = new Course() { Id = Guid.NewGuid(), Name = "English" };
var math = new Course() { Id = Guid.NewGuid(), Name = "Math" };
var studentsA = new List<Student>()
Courses = new List<Course> { algebra, math }
Courses = new List<Course> { algebra, english }
Courses = new List<Course> { chemistry, english }
Courses = new List<Course> { chemistry, english, math }
var studentsB = new List<Student>()
Courses = new List<Course> { algebra, chemistry }
Courses = new List<Course> { math, algebra }
Courses = new List<Course> { math, chemistry, english }
Courses = new List<Course> { chemistry, english, algebra }
Courses = new List<Course> { algebra, math }
var courseBasedStudentMapping = studentsA
.Where(studentB => studentB.Courses.Select(course => course.Id).OrderBy(id => id)
.SequenceEqual(studentA.Courses.Select(course => course.Id).OrderBy(id => id))));
foreach (var kvp in courseBasedStudentMapping)
Console.Write("Student " + kvp.Key.Name + " takes courses: ");
Console.Write(string.Join(", ", kvp.Key.Courses.Select(course => course.Name)));
Console.Write(" (same as student " + string.Join(", ", kvp.Value.Select(student => student.Name)) + ")");
public Guid Id { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; } = new();
public Guid Id { get; set; }
public string Name { get; set; }