我有一个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。
答案 0 :(得分:18)
这将为每个“类型”返回一个项目(如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();
如果你只想要没有重复的元素(所以如果你有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();