私は数日間そのようなものを探していました。私は大きなリストAからリストBに従ってすべての要素を削除しようとしています。別のリストからオブジェクトのリストを削除する
IDSの異なる100個の要素で一般的なリストが得られ、10個のレコードで特定の要素を持つ別のリストが得られるとします。 2番目のリストの中に存在しない最初のリストからすべての要素を削除する必要があります。
私はコードが実際にどのように動作していないのかわからないことを示すようにしようとします。
List<Obj> listA = new List<Obj>();
List<Obj> listB = new List<Obj>();
//here I load my first list with many elements
//here I load my second list with some specific elements
listA.RemoveAll(x => !listB.Contains(x));
私は理由を知りませんが、それは働いていません。 List<int>
タイプでこの例を試してみると、うまく動作しますが、私はそのオブジェクトでそれをしたいと思います。このオブジェクトにはIDがありますが、LINQ文内でこのIDを使用する方法はわかりません。あなたがIDを比較する必要が
両方のリストに同じオブジェクト(同じクラスの別のインスタンスである可能性がありますが、同じデータが含まれている可能性があります)が含まれているため、問題はContainsです。 – HiperiX
System.Objectから継承したメソッドの代わりにIDフィールドを使用するには、Obj型のEquals/GetHashcodeをオーバーライドしましたか? –
オブジェクトのタイプは同じですが内容は異なりますが、IDとオブジェクト全体を比較するだけでした。ちょうどIAbstract〜の答えに従って、魅力的に働いた...ありがとう、みんな! –