これを行うには簡単な LINQ クエリがあると思いますが、その方法が正確にはわかりません。
次のコードがあるとします:
class Program
{
static void Main(string[] args)
{
List<Person> peopleList1 = new List<Person>();
peopleList1.Add(new Person() { ID = 1 });
peopleList1.Add(new Person() { ID = 2 });
peopleList1.Add(new Person() { ID = 3 });
List<Person> peopleList2 = new List<Person>();
peopleList2.Add(new Person() { ID = 1 });
peopleList2.Add(new Person() { ID = 2 });
peopleList2.Add(new Person() { ID = 3 });
peopleList2.Add(new Person() { ID = 4 });
peopleList2.Add(new Person() { ID = 5 });
}
}
class Person
{
public int ID { get; set; }
}
peopleList2
LINQ クエリを実行して、に含まれていて に含まれていないすべての人物を取得したいと思いますpeopleList1
。
この例では、2 人の人物 (ID = 4 と ID = 5) が返されます。
ベストアンサー1
これは、次の LINQ 式を使用して解決できます。
var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));
これを LINQ 経由で表現する別の方法は、一部の開発者にとってより読みやすいと感じられるものです。
var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));
警告:コメントに記載されているように、これらのアプローチではO(n*m)の演算が必須です。これは問題ないかもしれませんが、特にデータ セットが非常に大きい場合は、パフォーマンスの問題が発生する可能性があります。これでパフォーマンス要件が満たされない場合は、他のオプションを評価する必要があります。ただし、記載されている要件は LINQ でのソリューションに対するものであるため、これらのオプションについてはここでは説明しません。常に、プロジェクトのパフォーマンス要件に対してアプローチを評価してください。