根据多个字段或列从列表中删除重复项

Remove duplicates from list based on multiple fields or columns

我有一个 MyClass 类型的列表

public class MyClass
{
   public string prop1 {} 
   public int prop2 {} 
   public string prop3 {} 
   public int prop4 {} 
   public string prop5 {} 
   public string prop6 {} 
   ....
}

此列表将有重复项。我想从此列表中查找并删除 prop1、prop2 和 prop3 重复的项目。其他属性是否重复并不重要

这是我试过的方法,但没有用。

List<MyClass> noDups = myClassList.GroupBy(d => new {d.prop1,d.prop2,d.prop3} ).Where(g => g.Count() > 1).Select(g=> g.Key);

我不想为此使用任何第三方工具。只有纯 linq.

这将 return 每个 "type" 一个项目(如 Distinct)(所以如果你有 A、A、B、C,它将 return A , B, C)

List<MyClass> noDups = myClassList.GroupBy(d => new {d.prop1,d.prop2,d.prop3} )
                                  .Select(d => d.First())
                                  .ToList();

如果您只想要没有重复的元素(所以如果您有 A、A、B、C 它将 return B、C):

List<MyClass> noDups = myClassList.GroupBy(d => new {d.prop1,d.prop2,d.prop3} )
                                  .Where(d => d.Count() == 1)
                                  .Select(d => d.First())
                                  .ToList();