我有两个需要比较的列表,应该通过外部ID排除重复项,但是我总是得到的结果是两个列表中具有相同外部标识的记录列表。
代码:
public class FooComparer : IEqualityComparer<Foo>
{
public bool Equals(Foo x, Foo y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null) || ReferenceEquals(y, null))
return false;
return x.ExternalId == y.ExternalId;
}
public int GetHashCode(Foo foo)
{
if (ReferenceEquals(foo, null)) return 0;
return foo.ExternalId.GetHashCode();
}
}
var bulkFoos = _bulkFoo.GetBulkFoos();
var fooFromXmlList = Mapper.Map<List<Foo>>(bulkFoos);
var foosWithUniqueId = _fooRepository.GetAllWithExternalId();
var fooWithUniqueIdList = Mapper.Map<List<Foo>>(foosWithUniqueId);
var fooList = fooFromXmlList.Except(fooWithExternalIdList, new FooComparer());
答案 0 :(得分:1)
您的foo.Id
实现应使用与相等属性相同的属性,但是您的使用foo.externalId
表示哈希码,GetHashCode
表示相等。将externalId
更改为使用public int GetHashCode(Foo foo)
{
if(ReferenceEquals(foo, null)) return 0;
else return foo.externalId.GetHashCode();
}
:
{{1}}