0

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

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

我怎样才能用 LINQ 做到这一点?

试过:

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

但似乎我需要演员?

4

2 回答 2

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());
于 2012-07-19T08:56:39.907 回答
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);
});
于 2012-07-19T08:49:07.620 回答