Ваш код работает. Не очень понятно, что вы хотите удалить. В заголовке указано удаление самого младшего, но toDeleteList
содержит всех учеников, кроме самого младшего.
Вот как вы можете получить только одного самого младшего студента из каждой группы:
var toDeleteList = students.GroupBy(x => x.DOB.Year)
.Select(g => g.OrderBy(x => x.DOB).Take(1))
.SelectMany(x => x)
.ToList();
Здесь вы получаете всех самых маленьких учеников из каждой группы (если у некоторых из них одинаковые самые ранние DOB):
var toDeleteList = students.GroupBy(x => x.DOB.Year)
.Select(g => g.Where(x => x.DOB == g.Min(gr => gr.DOB)))
.SelectMany(x => x);
.ToList();
GroupBy(x => x.DOB.Year)
объединяет студентов в две группы, так как я заметил, что у всех учащихся Group1
2000 года, а у всех учащихся Group2
1999 года DOB. Я сделал это только для того, чтобы две группы студентов соответствовали вашему примеру. Конечно, вы должны группировать как хотите.