List 基于另一个列表筛选列表

List 基于另一个列表筛选列表,list,filter,compare,List,Filter,Compare,我有两个基于其他对象的列表 List<Emyployee> emyployeeList; List<Display> displayEmployeeList; 列出emyployelist; 列表显示员工列表; 他们都有员工的id,但第二个列表中只有少数员工。 我想筛选我拥有所有不在displayEmployeeList中的id的employeeList 我该怎么做 如果displayEmployeeList中有许多项目,您会发现这些项目对于创建一种索引(如RDBMS

我有两个基于其他对象的列表

List<Emyployee> emyployeeList;
List<Display> displayEmployeeList;
列出emyployelist;
列表显示员工列表;
他们都有员工的id,但第二个列表中只有少数员工。 我想筛选我拥有所有不在displayEmployeeList中的id的employeeList


我该怎么做

如果
displayEmployeeList
中有许多项目,您会发现这些项目对于创建一种索引(如RDBMS)非常有用:

//让id为整数
HashSet id=新的HashSet(displayEmployeeList
.Select(item=>item.id)
);
//林克在哪里
var结果=EMYPLoyeList
.Where(item=>!ids.Contains(item.id));
您可以使用扩展方法,并按如下方式执行:

employeeList.Zip(displayEmployeeList,(employee,display) => 
             {
                if(employee.Id != display.Id)
                  return employee;
             });

到目前为止你试过什么吗?如果是,请向我们提供您的工作。是的,我尝试了此操作,但显然不起作用:newemyployelist=emyployelist.FindAll(x=>x.id!=displayEmployeeList[0].id);好的,是的,这显然不是正确的方法。因为您正在处理
displayEmployeeList
中的第一个元素。第一个明显的解决方案是创建两个foreach循环。您可以考虑的另一个可能的解决方案是使用
employeeList.Zip(displayEmployeeList,(employee,display) => 
             {
                if(employee.Id != display.Id)
                  return employee;
             });