Сравнение двух списков и игнорирование определенного свойства

У меня есть два списка сотрудников, из которых я хочу получить только уникальные записи, но в этом есть своя изюминка. В каждом списке есть класс 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();
        }
    }

Как мне успешно сделать то, что я хочу, и выполнить эту операцию? Спасибо за любую помощь!

7
задан Daniel Mann 23 March 2012 в 02:36
поделиться