Как получить список объектов с наименьшей датой из списка объектов с датами?

#c#

Вопрос:

Я создал простой класс, представляющий проект:

 class Player
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public DateTime BirthDate { get; set; }
        public double Height { get; set; }
        public string Position { get; set; }
    }

 

Теперь у меня есть их список. Мне нужен список объектов (игроков) с самыми новыми датами (самые молодые игроки) , чем есть несколько игроков с точно такой же датой рождения. Как мне это сделать?

Комментарии:

1. Сгруппировать по BirthDate , отсортировать, захватить первый элемент (группу)?

2. @David Группа по или по заказу?

3. @Duston: Сначала один, потом другой. (Какой из них первый, может даже не иметь значения.)

Ответ №1:

Я решил вашу проблему, используя немного примитивный метод.

Я генерирую случайные объекты

 public List<Player> Players = new List<Player>
        {
            new Player(){ Name="elcin", BirthDate = DateTime.Now.AddDays(-234)},
            new Player(){ Name="kazim", BirthDate = DateTime.Now.AddDays(-4)},
            new Player(){ Name="emin", BirthDate = DateTime.Now.AddDays(-34)},
            new Player(){ Name="sasa", BirthDate = DateTime.Now.AddDays(-234)},
            new Player(){ Name="dada", BirthDate = DateTime.Now.AddDays(-44444)},  
            new Player(){ Name="fafa", BirthDate = DateTime.Now.AddDays(-42)},
            new Player(){ Name="gaga", BirthDate = DateTime.Now.AddDays(-24)},
            new Player(){ Name="xaxa", BirthDate = DateTime.Now.AddDays(-2234)},   
            new Player(){ Name="caca", BirthDate = DateTime.Now.AddDays(-124)},
        };
 

Затем я создал объект с именем сортированный для перечисленных игроков.

 List<Player> sorted = new List<Player>();
 

Я отсортировал список рекурсивным методом.

 public void SortedList(List<Player> players)
        {
            Player player = new Player();
            DateTime minDate = DateTime.Now;
            foreach(var item in players)
            {
                if(minDate>item.BirthDate)
                {
                    minDate = item.BirthDate;
                    player = item;
                }
            }
            players.Remove(player);
            sorted.Add(player);
            if (players.Count!=0)
            {
                SortedList(players);
            }
        }
 

Чтобы кратко просмотреть его, я отправляю объект списка в SortedList метод и получаю свой объект, указанный в sorted объекте за пределами метода.

Буду признателен, если вы его нашли. полезный

Ответ №2:

Самый простой способ решить эту проблему-сгруппировать коллекцию по дню рождения, чем брать группу с последней датой и сглаживать эту группу.

   listOfPlayers.GroupBy(e => e.BirthDate)
               .OrderByDescending(e => e.Key)
               .Take(1)
               .SelectMany(e => e)
               .ToList();