【问题标题】:Filter List based on another list根据另一个列表过滤列表
【发布时间】:2015-06-10 07:27:05
【问题描述】:

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

List<Emyployee> emyployeeList;
List<Display> displayEmployeeList;

他们都有员工的 id,但第二个列表只有几个。 我想过滤没有在 displayEmployeeList 中的所有 id 的employeeList。

我该怎么做?

【问题讨论】:

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

标签: list filter compare


【解决方案1】:

如果displayEmployeeList许多项,您会发现创建一种索引(类似于RDBMS)很有用:

  // let id be integer
  HashSet<int> ids = new HashSet<int>(displayEmployeeList
    .Select(item => item.id)
  );

  // Just Linq where
  var result = emyployeeList
    .Where(item => !ids.Contains(item.id));

【讨论】:

    【解决方案2】:

    您可以使用Zip 扩展方法并像下面这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多