したがって、すべての新規顧客と、新しいリストに含まれていないすべての古い顧客を取得する必要があります。
List<Customer> customers = NewCustomers.Concat(OldCustomers.Except(NewCustomers)).ToList();
IEqualityComparer<T>
顧客を比較するための一般的なインターフェースを実装することを忘れないでください (おそらく によってCustomerID
)。GetHashCode
したがって、独自のおよびEquals
メソッドを提供する必要がありますCustomer
。
可能な実装は次のとおりです。
public class Customer
{
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public override bool Equals(Object obj)
{
Customer cust = obj as Customer;
if (cust == null) return false;
return cust.CustomerID == CustomerID;
}
public override int GetHashCode()
{
return CustomerID.GetHashCode();
}
public class Comparer : IEqualityComparer<Customer>
{
public bool Equals(Customer x, Customer y)
{
if (x == null && y == null) return true;
if (x == null || y == null) return false;
return x.Equals(y);
}
public int GetHashCode(Customer obj)
{
if (obj == null) return -1;
return obj.GetHashCode();
}
}
}
Equals
とGetHashCode
をオーバーライドすることに注意してくださいCustomer
。IEqualityComparer<Customer>
この方法では、 to Except
(または比較子を渡すことができる他のメソッド)のインスタンスを渡す必要さえありません。
しかし、完全を期すためにComparer
、インターフェイスを実装するクラスも追加したので、Except に渡すこともできます。
NewCustomers.Concat(OldCustomers.Except(NewCustomers, new Customer.Comparer()));