根据多个字段或列从列表中删除重复项
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();
我有一个 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();