Почему Linq Distinct () не работает для моего списка консультантов? - PullRequest
0 голосов
/ 06 августа 2020

Я пытался вернуть отдельные значения в моем списке консультантов, но он все еще возвращает дубликаты.

ConsultantList = p.ProjectExtensions
       .SelectMany(pext => pext.Consultants)
       .Distinct()
       .Select(c =>
             new ConsultantItemDTO
             {
                EmployeeId = c.ConsultantId,
                EmployeeName = c.Employee.Firstname + " " + c.Employee.Lastname
             }),

Вот весь метод:

Получить метод проекта

1 Ответ

0 голосов
/ 07 августа 2020

В документации говорится: :

Если вы хотите вернуть отдельные элементы из последовательностей объектов некоторого настраиваемого типа данных, вы должны реализовать IEquatable generi c интерфейс в классе.

Или вы можете расширить IEnumerable:

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

Пример использования:

.Select(p => p.Employee)
.DistinctBy(p => p.EmployeeId)
...