我的收藏中的项目内的属性不同

时间:2012-07-19 08:45:21

标签: linq ienumerable distinct

我有一个IEnumerable<MyObject>个集合,其中包含N MyObject个元素。 MyObject是一个具有Title,Description和ID(作为字符串)的类。

由于ID字段,我希望我的集合具有不同的MyObject列表。 因此,如果2 MyObject具有相同的ID,则应删除一个(不关心哪个,我需要唯一的ID)。

如何使用LINQ进行操作?

试过:

myList = myList.GroupBy(o => o.ID); 

但似乎我需要演员?

2 个答案:

答案 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);
});