假设您有一个MyObject列表,如下所示:
public class MyObject
{
public int ObjectID {get;set;}
public string Prop1 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
如何从列表中删除重复项,其中可能存在具有相同ObjectID的多个对象实例.
谢谢.
Bro*_*ass 45
您可以使用GroupBy()并选择每个组的第一个项目来实现您想要的 - 假设您想为每个不同的ObjectId属性选择一个项目:
var distinctList = myList.GroupBy(x => x.ObjectID)
.Select(g => g.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者DistinctBy(),在MoreLinq项目中也可以使用更简洁的语法(但会为项目添加依赖项):
var distinctList = myList.DistinctBy( x => x.ObjectID).ToList();
Run Code Online (Sandbox Code Playgroud)
Kri*_*aes 12
您可以使用该Distinct()方法执行此操作.但由于该方法使用默认的相等比较器,因此您的类需要IEquatable<MyObject>像这样实现:
public class MyObject : IEquatable<MyObject>
{
public int ObjectID {get;set;}
public string Prop1 {get;set;}
public bool Equals(MyObject other)
{
if (other == null) return false;
else return this.ObjectID.Equals(other.ObjectID);
}
public override int GetHashCode()
{
return this.ObjectID.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用以下Distinct()方法:
List<MyObject> myList = new List<MyObject>();
myList.Add(new MyObject { ObjectID = 1, Prop1 = "Something" });
myList.Add(new MyObject { ObjectID = 2, Prop1 = "Another thing" });
myList.Add(new MyObject { ObjectID = 3, Prop1 = "Yet another thing" });
myList.Add(new MyObject { ObjectID = 1, Prop1 = "Something" });
var duplicatesRemoved = myList.Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38274 次 |
| 最近记录: |