У меня есть два списка сотрудников, из которых я хочу получить только уникальные записи, но в этом есть своя изюминка. В каждом списке есть класс Employee:
public class Employee
{
// I want to completely ignore ID in the comparison
public int ID{ get; set; }
// I want to use FirstName and LastName in comparison
public string FirstName{ get; set; }
public string LastName{ get; set; }
}
Единственными свойствами, которые я хочу сравнить, являются FirstName и LastName.Я хочу полностью игнорировать ID при сравнении. В списке allFulltimeEmployees 3 сотрудника, а в списке allParttimeEmployees 3 сотрудника. Имя и фамилия совпадают в двух пунктах списка — Салли Джонс и Фред Джексон. В списке есть один элемент, который не совпадает, потому что FirstName совпадает, а LastName отличается:
emp.id = null; // not populated or used in comparison
emp.FirstName = "Joe"; // same
emp.LastName = "Smith"; // different
allFulltimeEmployees.Add(emp);
emp.id = 3; // not used in comparison
emp.FirstName = "Joe"; // a match
emp.LastName = "Williams"; // not a match - different last name
allParttimeEmployees.Add(emp);
Итак, я хочу игнорировать свойство ID в классе при сравнении двух списков. Я хочу пометить Джо Уильямса как несоответствующего, поскольку фамилии Смита и Уильямса в двух списках не совпадают.
// finalResult should only have Joe Williams in it
var finalResult = allFulltimeEmployees.Except(allParttimeEmployees);
Я пытался использовать IEqualityComparer, но он не работает, так как он использует один класс Employee в параметрах, а не список IEnumerable:
public class EmployeeEqualityComparer : IEqualityComparer<Employee>
{
public bool Equals(Employee x, Employee y)
{
if (x.FirstName == y.FirstName && x.LastName == y.LastName)
{
return true;
}
else
{
return false;
}
}
public int GetHashCode(Employee obj)
{
return obj.GetHashCode();
}
}
Как мне успешно сделать то, что я хочу, и выполнить эту операцию? Спасибо за любую помощь!