所以,你要採取一切新的客戶和所有的老客戶其不在新的清單:
List<Customer> customers = NewCustomers.Concat(OldCustomers.Except(NewCustomers)).ToList();
記住落實IEqualityComparer<T>
通用界面來比較你的客戶(可能由CustomerID
)。因此,您需要爲Customer
提供自己的GetHashCode
和Equals
方法。
這裏是一個可能的實現:
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();
}
}
}
注意,我在Customer
覆蓋Equals
和GetHashCode
。通過這種方式,您甚至不需要將IEqualityComparer<Customer>
的實例傳遞給Except
(或允許傳遞比較器的任何其他方法)。
但對於完整起見我還添加了一個實現該接口的類Comparer
,所以你也可以通過它來除:
NewCustomers.Concat(OldCustomers.Except(NewCustomers, new Customer.Comparer()));
你試過了'Union'方法?爲什麼它不工作? – jeroenh