Получить уникальные элементы из списка на основе свойства элемента - PullRequest
0 голосов
/ 19 марта 2019

Как получить уникальные элементы из списка на основе свойства string Name? Я пробовал это, но это не работает. Результирующий список сортируется и группируется, но дублированные элементы не удаляются:

List<ElementType> uniqueTypes = types.OrderBy(g => g.Name)
.GroupBy(g => g.Name).Select(s => s.First()).ToList();

Любая помощь, высоко ценится.

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Используйте одно из стандартных определений для метода расширения DistinctBy. Вот пара, которую я использую:

public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> src, Func<T, TKey> keySelector, IEqualityComparer<TKey> comparer = null) {
    var seenKeys = new HashSet<TKey>(comparer);
    foreach (var e in src)
        if (seenKeys.Add(keySelector(e)))
            yield return e;
}
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> src, Func<T, TKey> keySelector, Func<IGrouping<TKey, T>, T> pickOne, IEqualityComparer<TKey> comparer = null) =>
    src.GroupBy(keySelector).Select(g => pickOne(g));
0 голосов
/ 19 марта 2019

Решением будет создание копии вашего List и реализация Equals и GetHashCode в вашем ElementType (вы можете реализовать Equals так, чтобы он возвращал true, когда только свойства name равны), чтобы вы могли добавлять в свой новый список только элементыкоторые не в вашем старом списке с помощью:

if (newList.Contains(element))
    //remove element from the old list or you can check if !Contains and add the element to the new list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...