我有两个具有属性的自定义列表对象:ID(自动生成-Guid),EmpoyeeID,名字,姓氏和雇佣状态。
我想使用Except()
关键字比较两个列表的区别,但是我想专门忽略ID属性。
如何忽略ID属性以查找两个列表之间的差异?
答案 0 :(得分:3)
您可以创建自己的IEqualityComparer自定义实现,如下所示:
这是一个Fiddle示例,其中应返回List1的最后四名员工:https://dotnetfiddle.net/f3sBLq
在此示例中,EmployeeComparer
继承自IEqualityComparer<Employee>
,其中Employee是具有您列出的属性(EmployeeID,Firstname,Lastname,Employmentstatus)的类
public class EmployeeComparer : IEqualityComparer<Employee>
{
public int GetHashCode(Employee co)
{
if (co == null)
{
return 0;
}
//You can use any property you want (other than EmployeeID for your purposes); the GetHashCode metho is used to generate an address to where the object is stored
return co.Employmentstatus.GetHashCode();
}
public bool Equals(Employee x1, Employee x2)
{
if (object.ReferenceEquals(x1, x2))
{
return true;
}
if (object.ReferenceEquals(x1, null) || object.ReferenceEquals(x2, null))
{
return false;
}
// Check for equality with all properties except for EmployeeID
return x1.Employmentstatus == x2.Employmentstatus && x1.Firstname == x2.Firstname && x1.Lastname == x2.Lastname;
}
}
然后您可以像这样使用它:
var results = List2.Except(List1, new EmployeeComparer()).ToList();
编辑:原始问题未将ID
列为属性,并要求如何排除EmployeeID
,而这正是该答案和Fiddle链接示例所基于的。