Если вы планируете проводить эти сопоставления в нескольких местах, вы также можете создать пользовательский EqualityComparer<Customer>
и повторно использовать их везде, где это необходимо.
Это пример двух сопоставлений, основанных на Идентификаторе, а другой - на Идентификаторе и имени. Я собираюсь взять на себя идентификатор клиента является уникальным в этом примере:
public sealed class CustomerByIdEqualityComparer : IEqualityComparer<Customer>
{
public bool Equals(Customer x, Customer y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null)) return false;
if (ReferenceEquals(y, null)) return false;
if (x.GetType() != y.GetType()) return false;
return x.CustomerId == y.CustomerId;
}
public int GetHashCode(Customer obj)
{
return obj.CustomerId;
}
}
public sealed class CustomerByIdAndNameEqualityComparer : IEqualityComparer<Customer>
{
public bool Equals(Customer x, Customer y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null)) return false;
if (ReferenceEquals(y, null)) return false;
if (x.GetType() != y.GetType()) return false;
return !string.Equals(x.CustomerName, y.CustomerName) &&
x.CustomerId == y.CustomerId;
}
public int GetHashCode(Customer obj)
{
return obj.CustomerId;
}
}
И вы потребляете их с помощью Enumerable.Except
:
var comparerById = new CustomerByIdEqualityComparer();
var comparerByIdAndName = new CustomerByIdAndNameEqualityComparer();
var customerARelativeComplement = customersA.Except(customersB, comparerById);
var customerBRelativeComplement = customersB.Except(customersA, comparerById);
var customersBRelativeComplementByName = customersB
.Except(customersA, comparerByIdAndName);
Если вы работаете с большими наборами, рассмотреть возможность использования HashSet<T>
сделать фильтрация. Только проблема заключается в том, что вы можете передать только один EqualityComparer<T>
, и вы будете связаны с ним.
Предлагаю вам ознакомиться с LINQ - это делает все так просто. Затем вы можете попробовать это для себя и задать более конкретный вопрос, включая то, что вы пробовали, и проблемы, с которыми вы столкнулись. –