一意のレコードのみを取得したい 2 つの従業員リストがありますが、これにはひねりがあります。各リストには 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 人の従業員が含まれています。リスト内の 2 つの項目 (Sally Jones と Fred Jackson) で名と姓が一致します。リストには、FirstName が同じで LastName が異なるため、一致しない項目が 1 つあります。
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);
したがって、2 つのリストの比較中は、クラスの ID プロパティを無視したいと考えています。2 つのリストの Smith と Williams の姓が一致しないため、Joe Williams に不一致のフラグを立てたいと思います。
// finalResult should only have Joe Williams in it
var finalResult = allFulltimeEmployees.Except(allParttimeEmployees);
IEqualityComparer を使用してみましたが、パラメーターで IEnumerable リストではなく単一の Employee クラスを使用しているため、機能しません。
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();
}
}
やりたいことをうまくやって、この操作を実行するにはどうすればよいですか? 助けてくれてありがとう!