0

IEnumerable<MyObject>N個MyObjectの要素を持つコレクションがあります。MyObjectは、タイトル、説明、およびID(文字列として)を持つクラスです。

IDフィールドがあるため、MyObjectの個別のリストを含むコレクションが必要です。したがって、2つのMyObjectが同じIDを持っている場合は、1つを削除する必要があります(どちらでもかまいません。一意の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 に答える