我有一个IEnumerable<MyObject>
个集合,其中包含N MyObject
个元素。
MyObject是一个具有Title,Description和ID(作为字符串)的类。
由于ID字段,我希望我的集合具有不同的MyObject列表。 因此,如果2 MyObject具有相同的ID,则应删除一个(不关心哪个,我需要唯一的ID)。
如何使用LINQ进行操作?
试过:
myList = myList.GroupBy(o => o.ID);
但似乎我需要演员?
答案 0 :(得分:1)
您可以实施自定义IEqualityComparer<MyObject>
。然后,您可以使用Enumerable.Distinct
过滤掉重复项。
class DistinctIdComparer : IEqualityComparer<MyObject> {
public bool Equals(MyObject x, MyObject y) {
return x.Id == y.Id;
}
public int GetHashCode(MyObject obj) {
return obj.Id.GetHashCode();
}
}
现在很简单:
IEnumerable<MyObject> distinct = myObjects.Distinct(new DistinctIdComparer());
或者您可以使用Enumerable.GroupBy
更简单的方法:
distinct = myObjects.GroupBy(o => o.ID)
.Select(g => g.First());
答案 1 :(得分:0)
如果您只想要唯一ID,那么您可以尝试。
var uniqueIds = myObjects.Select(x=>x.ID).Distinct();
或者是唯一ID对象
List<MyObject> objs = new List<MyObject> ();
myObjects.ForEach(x=>{
if(objs.Find(y=>y.ID == x.ID)== null)
objs.Add(x);
});