我尝试在电子邮件地址和电话号码匹配时删除重复的条目。我已经尝试了几种解决方案,但我无法解决任何问题。我甚至尝试过下面发布的链接中的C#样本。
似乎调用实际方法的行无法正常工作。在调试模式下,我希望程序在执行比较器时会慢一点。它似乎只是绕过了比较器。这是我如何调用比较器。
IEnumerable<MerchantConsumer> noduplicates = consumers2.Distinct(new MerchantConsumerComparer2());
我已将比较器代码添加到我的Controller中并在那里调用它。我还将比较器代码添加到实际的实体(MerchantConsumer类)中并在那里调用它。
这是我的比较代码。
public class MerchantConsumerComparer2 : IEqualityComparer<MerchantConsumer>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(MerchantConsumer x, MerchantConsumer y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.Email == y.Email && x.PhoneNumber == y.PhoneNumber;
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public int GetHashCode(MerchantConsumer consumer)
{
//Check whether the object is null
if (Object.ReferenceEquals(consumer, null)) return 0;
//Get hash code for the Name field if it is not null.
int hashEmail = consumer.Email == null ? 0 : consumer.Email.GetHashCode();
//Get hash code for the Code field.
//int hashProductCode = product.Code.GetHashCode();
int hashPhone = consumer.PhoneNumber == null ? 0 : consumer.PhoneNumber.GetHashCode();
//Calculate the hash code for the product.
return hashEmail ^ hashPhone;
}
}
这样可行,但它不会删除重复的电子邮件。
var consumersFiltered = consumerList.GroupBy(i => i.PhoneNumber).Select(g => g.FirstOrDefault()).ToList();
是否有任何删除重复项的新方法?
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
我实际上通过将其转换为类似的列表来实现此目的。在我看到的所有示例中,没有一个转换为列表。
var noduplicates = consumers2.Distinct(new MerchantConsumerComparer2()).ToList();
它似乎非常快,无论比较器是在Controller中还是在实体中,它都可以工作。