複数のオブジェクト リストを扱う場合、それらを 1 つのまとまった単位に結合する必要が生じることがよくあります。 。このシナリオでは、Person オブジェクトの 2 つのリストがあり、それらをマージし、重複が存在する場合はそれぞれの値の差として Change 値を計算します。
これを実現するために、LINQ は強力な拡張メソッドである Union を提供します。 。デフォルトでは、このメソッドは、Person クラスで定義されている Equals メソッドと GetHashCode メソッドに基づいて重複を削除します。 Person クラスにこれらのメソッドがオーバーライドされていない場合、またはカスタムの比較を実行したい場合は、次の方法があります:
Personal 内クラスで、Equals メソッドと GetHashCode メソッドをオーバーライドして、目的のプロパティに基づいてオブジェクトを比較します。名前:
public override bool Equals(object obj) { // Convert object to a Person for comparison var person = obj as Person; if (person == null) return false; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { if (personToCompareTo == null) return false; if (string.IsNullOrEmpty(personToCompareTo.Name)) return false; return Name.Equals(personToCompareTo.Name); }
IEqualityComparer インターフェイスを実装する比較クラスを実装します。この比較子を Linq Union 拡張メソッドの 2 番目のパラメーターとして指定します:
// Implement IEqualityComparer<Person> public bool Equals(Person x, Person y) { // Your custom comparison here } public int GetHashCode(Person person) { // Your custom hash code generation here } var mergedList = list1.Union(list2, new MyPersonComparer());
以上がLINQ の Union メソッドはオブジェクトの 2 つのリストを結合し、重複を処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。