为什么Linq Distinct()对我的ConsultantList不起作用?

时间:2020-08-06 10:10:42

标签: c# list linq object distinct

我试图在我的ConsultantList中返回不同的值,但它仍返回重复项。

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

这是整个方法:

Get Project Method

1 个答案:

答案 0 :(得分:0)

documentation says中:

如果要从某些自定义数据类型的对象序列中返回不同的元素,则必须在该类中实现IEquatable通用接口。

或者您可以扩展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)