列出每年的第一个可用项目

PEP*_*EGA 2 c# time date

我有一个日期列表,我希望每年检索每个第一个现有项目.问题是它并不总是包含1月1日的项目.下面的代码可以获取所有内容,但是如果缺少一天,则不会显示整年.

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

日期的外观示例.

  • 2000-01-01
  • 2000年2月3日
  • 2001-03-11等

我怎么能这样做我总是得到正确的项目?在这个例子中,我总是想得到row1和row3.我可以使用一堆if语句创建一个循环并添加几个月和几年但我想用linq或lambda处理这个问题.

fub*_*ubo 6

GroupBy() 多年来,每年订购并挑选最旧的商品.

List<DateTime> result = input.GroupBy(x => x.Year)
                             .Select(x => x.OrderBy(y => y).First()).ToList();
Run Code Online (Sandbox Code Playgroud)

示例:https://dotnetfiddle.net/As0FBI