Возьмите первый доступный предмет за каждый год в списке - PullRequest
0 голосов
/ 29 мая 2018

У меня есть список с датами, которые я хочу получить каждый первый существующий элемент для каждого года.Проблема в том, что он не всегда содержит элемент на первое января.Ниже код получает все на данный момент, но если день отсутствует, целый год не отображается.

foreach (var index in pModel.IndexData)
{
    if (index.Date.ConvertToDateTime().Day == 02 && index.Date.ConvertToDateTime().Month == 01)
         {
            yearlyIndex.Add(index);
         }
}

Пример того, как могут выглядеть даты.

  • 2000-01-01
  • 2000-02-03
  • 2001-03-11 ... и т. Д.

Как я могу сделать так, чтобы я всегда получал правильный товар?В этом примере я всегда хочу получить row1 и row3.Я могу сделать цикл с кучей операторов if и добавить дни месяца и года, но я бы хотел решить эту проблему с помощью linq или lambda.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Принятый ответ излишне многословен, если вам нужен только список минимальных дат для каждого года.Тот же результат может быть достигнут более эффективно путем замены OrderBy(y => y).First() только на .Min().

var result = input.GroupBy(x => x.Year)
                  .Select(x => x.Min()).ToList();

Если бы дата была свойством типа элемента списка вместо самого типа, тогда принятый ответбыть правильным решением, если на это свойство ссылается функция выбора OrderBy.

0 голосов
/ 29 мая 2018

GroupBy() лет, заказ и выбор самого старого предмета в год.

List<DateTime> result = input.GroupBy(x => x.Year)
                             .Select(x => x.OrderBy(y => y).First()).ToList();

Образец: https://dotnetfiddle.net/As0FBI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...