Для объекта со свойствами A, B, C, D, StartDate и EndDate, если бы я хотел реализовать что-то, где любые два объекта равны, если они имеют идентичные A, B и C и перекрывающийся диапазон дат, как это будет сделано
Я пытался создать EqualityComparer, например,
public override bool Equals(RateItem x, RateItem y)
{
bool equal = true;
if ((x.A != y.A || x.B != y.B || x.C != y.C ||
(x.StartDate < y.StartDate && x.EndDate <= y.StartDate) ||
(x.StartDate > y.StartDate && y.EndDate <= x.StartDate)))
{ equal = false; }
return equal;
}
Но кажется, что во многих местах фреймворка игнорируется Equals и используется GetHashCode, а документация по этому вопросу вообще не ясна. Когда я иду, чтобы реализовать GetHashCode, я не знаю, как заставить HashCodes получить то же самое, не игнорируя даты.
Чтобы сделать его немного более конкретным, это связано с управлением проектами и ставками. Я хочу реализовать бизнес-правило, согласно которому один и тот же человек в одном и том же проекте в одной роли не может иметь разные ставки в течение одного и того же периода времени. Таким образом, Боб на Project DeathMarch в роли администратора баз данных может иметь только одну эффективную ставку счета в любой момент времени, чтобы регистрировать свое время. Если ему нужно было пройти несколько часов в роли аналитика QA с другой скоростью в течение того же периода времени, это нормально. Это массивная ранее существовавшая система, поэтому изменение структуры доменного объекта не вариант.