如何使用其他列表过滤列表?

时间:2013-02-19 11:22:57

标签: c# linq

我们有以下员工名单。

List<Employee> EmployeeList =new List<Employee>();
EmployeeList.Add(new Employee{ Id=101, Name="XYZ" });
EmployeeList.Add(new Employee{ Id=102, Name="QRS" });
EmployeeList.Add(new Employee{ Id=103, Name="ABC" });
EmployeeList.Add(new Employee{ Id=1101, Name="DEF" });

所选员工ID列表如下。

List<long> selectedEmployeeIds={ 101,103 };

我们希望从上面的EmployeeList中过滤选定的Employees。我们尝试使用如下的contains,但它取3个记录为101,102,1101。

var selectedEmployees= (from record in EmployeeList where selectedEmployeeIds.Contains(record.Id.ToString()) select record).ToList(); // returning 3 records.

任何人都可以帮助我们只获得雇员101,103。

先谢谢。

2 个答案:

答案 0 :(得分:4)

您不需要ToString(),使用Enumerable.Contains,它将适用于任何数据类型,而不仅仅是字符串。由于selectedEmployeeIds的类型为long而您正在针对string进行检查,因此您当前的代码应该会出错。

var selectedEmployees= (from record in EmployeeList 
                       where selectedEmployeeIds.Contains(record.Id) 
                       select record).ToList();

答案 1 :(得分:0)

最后我们得到了上述查询的结果,

List<Employee> filteredRecords = (from a in EmployeeList join b in selectedEmployeeIds on a.ID equals b select a).ToList();