同じプロパティを共有する異なるオブジェクト(foo
&bar
)の2つのリストがあり、それを呼び出すことができますid
。
public List<foo> foo { get; set; }
public List<bar> bar { get; set; }
にfoo
存在しないIDを持つすべてのオブジェクトを削除したいbar
linqでこれをどのように行うことができますか?私が見てされているIntersect
、RemoveAll
とJoin
しかしリストは異なるタイプである任意の例を見つけることができません。
これを試して:
foo.RemoveAll(x=> !bar.Any(y=>y.Id==x.Id));
!bar.Any(y=>y.Id==x.Id)
アイテムがbar
コレクションにある場合は取得し、そうでない場合はfoo
コレクションから削除します。
ハッシュセットO(n)を使用したより良いソリューション:
var idsNotToBeRemoved = new HashSet<int>(bar.Select(item => item.Id));
foo.RemoveAll(item => !idsNotToBeRemoved.Contains(item.Id));
2番目の回答のソース:https://stackoverflow.com/a/4037674/1714342
編集:
@Carraが言ったように、最初の解決策は小さなリストに適していて、2番目の解決策は大きなリストに適しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加