Я не верю, что на самом деле гарантировано , но я был бы очень удивлен, увидев, как поведение Distinct
меняется с возврата элементов в порядке их появления в исходной последовательности.
Итак, если вам нужны определенные элементы, вам следует упорядочить исходную последовательность таким образом. Например:
items.OrderByDescending(x => x.Id)
.Distinct(new DistinctItemComparer());
Обратите внимание, что одной из альтернатив использования Distinct с пользовательским компаратором является использование DistinctBy
из MoreLINQ :
items.OrderByDescending(x => x.Id)
.DistinctBy(x => x.InnerId);
Хотя вы не можете гарантировать, что обычный порядок LINQ to Objects от Distinct
не изменится, я был бы рад добавить гарантию к MoreLINQ :) (Это единственный порядок, который в любом случае имеет смысл честно.)
Еще одной альтернативой было бы использовать GroupBy
вместо этого - тогда для каждого внутреннего идентификатора вы можете получить все соответствующих предметов и перейти оттуда.