我定义了一个对象,为它创建了一个IEqualityComparer类,并使用它:
someList.Distinct(new DistinctComparer());
我认为这样运作正常,但我错了。 comparer对象在Equals方法中指定对象的11个属性。我意识到删除的重复是随机的。
还有一个额外的属性,我希望删除基于日期。因此,对于在11个属性中具有重复项的对象,我希望保留具有最新日期的对象,其属性不包括在Equals方法中。
如果重要,该对象是USPS定义的美国地址。等于方法:
public bool Equals(Address x, Address y)
{
return x.HouseNo == y.HouseNo &&
x.PreDir == y.PreDir &&
x.StreetName == y.StreetName &&
x.StreetSuffix == y.StreetSuffix &&
x.PostDir == y.PostDir &&
x.City == y.City &&
x.State == y.State &&
x.Zip5 == y.Zip5 &&
x.Zip4 == y.Zip4 &&
x.Sud == y.Sud &&
x.UnitNum == y.UnitNum;
}
我不知道如何保留最近销售日期的地址。有线索吗?感谢
答案 0 :(得分:3)
因此,对于在11个属性中具有重复项的对象,我希望保留具有最新日期的对象,其属性不包括在Equals方法中。
在实践中,Distinct
将保留(或更确切地说,产生)任何相等值的 first 。所以你可以先反向按日期排序:
var results = someList.OrderByDescending(x => x.Date)
.Distinct(new CustomComparerWhichIgnoresDate());
这种行为无法保证,但我会感到震惊的是看到它发生变化 - 这是最简单,最明显的方法。 (有关详细信息,请参阅my Edulinq post on it。)您是否乐于依赖未记录的行为取决于您 - LINQ to Objects中有很多未记录,但是我对依赖它非常有信心。