Изменить:
Как отметил @NetMerge, это не будет работать в EF Core, поэтому я оставлю ответ здесь на тот случай, если OP все равно захочет взглянуть на него.
Вот образец класса только с двумя свойствами, на которые мы обращаем внимание, и ваш примерный список.
public class Student
{
public string Name { get; set; }
public DateTime End { get; set; }
}
var students = new List<Student>
{
new Student() { Name = "Bob", End = new DateTime(2020, 1, 1) },
new Student() { Name = "Chris", End = new DateTime(2020, 1, 2) },
new Student() { Name = "James", End = new DateTime(2020, 1, 3) },
new Student() { Name = "Bob", End = new DateTime(2020, 1, 4) },
new Student() { Name = "Chris", End = new DateTime(2020, 1, 5) },
new Student() { Name = "Bob", End = new DateTime(2020, 1, 6) },
new Student() { Name = "Bob", End = new DateTime(2020, 1, 7) },
new Student() { Name = "Bob", End = new DateTime(2020, 1, 8) },
new Student() { Name = "Chris", End = new DateTime(2020, 1, 9) },
new Student() { Name = "Bob", End = new DateTime(2020, 1, 10) }
};
Вы можете сделать GroupBy()
, а затем OrderByDescending()
свойство End
, и возьмите по 5 с каждой.
var recentFiveForEachName = students
.GroupBy(x => x.Name, (key, g) => g.OrderByDescending(y => y.End).Take(5));