Я предполагаю, что у вас есть две IEnumerable<EntityObject>
последовательности, и вы хотите знать, как использовать Except
таким образом, что два EntityObjects
считаются идентичными по определенным критериям. Далее я предполагаю, что эти критерии составляют одно простое правило (просто чтобы облегчить себе жизнь, предоставляя этот ответ): два элемента с одинаковым свойством BondIdentifier
будут считаться идентичными.
Итак, используйте перегрузку для Except
, которая принимает IEqualityComparer<T>
:
class EntityObjectComparer : IEqualityComparer<EntityObject>
{
public bool Equals(EntityObject x, EntityObject y)
{
string xId = GetBondIdentifier(x);
string yId = GetBondIdentifier(y);
return x.Equals(y);
}
private string GetBondIdentifier(EntityObject obj)
{
var sm = obj as SecurityMaster;
if (sm != null)
{
return sm.BondIdentifier;
}
var sms = obj as SecurityMasterSchedules;
if (sms != null)
{
return sms.BondIdentifier;
}
return string.Empty;
}
}
List<EntityObject> list1 = GetList1();
List<EntityObject> list2 = GetList2();
var itemsInList1NotInList2 = list1.Except(list2, new EntityObjectComparer());
Даже если мое предположение относительно критериев было неверным, вы все равно можете использовать этот ответ в качестве основы для формулирования своего собственного.
Если мое первоначальное предположение также было неверным, то, очевидно, этот ответ для вас бесполезен.