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

use*_*358 6 c# linq deduplication

我有一个MyClass类型的列表

public class MyClass
{
   public string prop1 {} 
   public int prop2 {} 
   public string prop3 {} 
   public int prop4 {} 
   public string prop5 {} 
   public string prop6 {} 
   ....
}
Run Code Online (Sandbox Code Playgroud)

此列表将具有重复项.我想查找和删除此列表中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);
Run Code Online (Sandbox Code Playgroud)

我不想使用任何第三方工具.只有纯粹的linq.

xan*_*tos 23

这将为每个"类型"返回一个项目(如a Distinct)(所以如果你有A,A,B,C它将返回A,B,C)

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

如果你只想要没有副本的元素(所以如果你有A,A,B,C它将返回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();
Run Code Online (Sandbox Code Playgroud)