我同意克里斯的观点
但是,如果您将 Date1 作为 Oct1,将 Date2 作为 Oct6,将 Date3 作为 Oct12。Date1 == Date2, and Date2 == Date3, 但是 Date1 != Date3 是一种奇怪的行为,Equals 的目的不是你应该使用的。
我真的不知道您是否正在开发新的东西,以及您是否有一个包含您的车辆索赔的数据库,但我会将数据库中的相关索赔作为父子关系。您必须问自己的是:您的日期范围内的 2 个车辆索赔是否可能不同?您是否可以使用任何其他属性来确定声明的唯一性?
也许你可以这样解决你的问题:
有一个
List<VehicleClaim> RelatedClaims
VehicleClaim 对象中的属性。
使用函数代替 Equals
bool IsRelated(VehicleClaim vehiculeClaim)
{
if(all properties except date are equals)
{
// since claims are sorted by date, we could compare only with the last element
foreach(var c in RelatedClaims){
if (IsDateRangeMatching(this.ClaimDate, c.ClaimDate))
return true;
}
}
return false;
}
并添加代码来构造你的对象
List<VehiculeClaim> yourListWithDuplicatesSortedByDate;
List<VehiculeClaim> noDuplicateList = new List<VehiculeClaim>();
foreach(var cwd in yourListWithDuplicatesSortedByDate)
{
var relatedFound = noDuplicateList.FirstOrDefault(e => e.IsRelated(cwd));
if (relatedFound != null)
relatedFound.RelatedClaims.Add(cwd);
else
noDuplicateList.Add(cwd);
}
问题在于,您的索赔必须按日期排序,这不是实现这一目标的最有效方式。