Если у меня есть List<MyType>
, то есть каждая строка, представляющая элемент в коллекции:
{{ Id = 1, Year = 2010 },
{ Id = 1, Year = 2009 },
{ Id = 1, Year = 2008 },
{ Id = 2, Year = 2010 },
{ Id = 2, Year = 2009 },
{ Id = 2, Year = 2008 }}
Я хочу получить из этой коллекции коллекцию самого последнего элемента для каждого идентификатора.Как будет выглядеть Linq для этого?
Желаемый результат:
{{ Id = 1, Year = 2010 },
{ Id = 2, Year = 2010 }}
У меня есть реализация naiive, использующая вторую переменную списка и цикл foreach, но он неэффективен.
//naiive implementation "p-code"
//...
var mostRecentItems = new List<MyType>();
var ids = collection.Select(i => i.Id).Distinct();
foreach(var id in ids)
{
mostRecentItems.Add(collection.Where(i => i.Id == id).OrderByDescending().First);
}
return mostRecentItems;