我有一个列表,其中包含我想要检索每年第一个现有项目的日期。问题是它并不总是包含1月1日的项目。下面的代码可以获取所有内容,但是如果缺少一天,则不会显示整年。
foreach (var index in pModel.IndexData)
{
if (index.Date.ConvertToDateTime().Day == 02 && index.Date.ConvertToDateTime().Month == 01)
{
yearlyIndex.Add(index);
}
}
日期的示例。
我怎么能这样做我总是得到正确的项目?在这个例子中,我总是想得到row1和row3。我可以使用一堆if语句创建一个循环并添加几个月和几年但我想用linq或lambda处理这个问题。
答案 0 :(得分:6)
GroupBy()
岁月,每年订购并挑选最旧的商品。
List<DateTime> result = input.GroupBy(x => x.Year)
.Select(x => x.OrderBy(y => y).First()).ToList();
答案 1 :(得分:1)
如果您想要的是每年的最短日期列表,则接受的答案是不必要的冗长。通过OrderBy(y => y).First()
与.Min()
进行交换,可以更有效地完成相同的结果。
var result = input.GroupBy(x => x.Year)
.Select(x => x.Min()).ToList();
如果日期是列表项类型的属性而不是类型本身,那么只要在OrderBy
选择器函数中引用了该属性,接受的答案就是正确的解决方案。