var items =
list.Where((x, i) => i%2 == 0)
.Zip(list.Where((x, i) => i%2 == 1), (f, s) => new {Id = f, Date = s})
.OrderByDescending(x => x.Date)
.DistinctBy(x => x.Id, null) // see note later in this answer....
.Take(5)
.ToList();
这将使用奇数元素压缩偶数元素,并将它们转换为具有 Id 和 Date 作为字段的对象。然后按日期排序,取最近的 5 个
这样您就可以遍历每个对象并按照您的意愿进行操作。
即,用于将 5 打印到控制台的示例...
items.ForEach(x => Console.WriteLine("{0} {1}", x.Id, x.Date));
用最大的日期做唯一的 ID .....参考LINQ: Distinct values
并使用 Skeet 先生展示的扩展方法......除了我已经改进了一点,我的版本是:-
public static class DistinctLinq
{
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IEqualityComparer<TKey> comparer)
{
var knownKeys = new HashSet<TKey>(comparer);
return source.Where(element => knownKeys.Add(keySelector(element)));
}
}