se debe redefinir los métodos Equals
y GetHashCode
en su clase Pay
, de lo contrario Intersect
no sabe cuándo 2 casos se consideran iguales. ¿Cómo podría suponer que es el EventId
el que determina la igualdad? oldPay
y newPay
son instancias diferentes, por lo que de forma predeterminada no se consideran iguales.
Puede reemplazar los métodos de Pay
así:
public override int GetHashCode()
{
return this.EventId;
}
public override bool Equals(object other)
{
if (other is Pay)
return ((Pay)other).EventId == this.EventId;
return false;
}
Otra opción es implementar una IEqualityComparer<Pay>
y pasarlo como parámetro a Intersect
:
public class PayComparer : IEqualityComparer<Pay>
{
public bool Equals(Pay x, Pay y)
{
if (x == y) // same instance or both null
return true;
if (x == null || y == null) // either one is null but not both
return false;
return x.EventId == y.EventId;
}
public int GetHashCode(Pay pay)
{
return pay != null ? pay.EventId : 0;
}
}
...
var Result = nlist.Intersect(olist, new PayComparer());
Suponiendo que la igualdad de pago es EventID, Number, AND Amount, no hay nada en común en esas dos listas y, por lo tanto, no se cruza nada. En otras palabras, no ha definido la igualdad aquí. –
¿A qué te refieres con que no se haya definido la igualdad aquí? solo elemento diferente es Amount = 100 – user570715
No hay nada en la pregunta que indique _why_ 'oldpay' debe ser igual a' newpay'. –