2013-02-19 84 views
0

我们拥有以下员工名单。如何使用另一个列表过滤列表?

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中选择的员工。我们尝试使用包含如下,但其取得3个记录为101,102,1101。

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

可以在任何一个帮助我们只拿到雇员101,103。

在此先感谢。

回答

0

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

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

你不需要ToString(),使用Enumerable.Contains,它可以处理任何数据类型,而不仅仅是字符串。您当前的代码应该给出错误,因为selectedEmployeeIds的类型为long,您正在对照string进行检查。

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

对不起。恐怕,Contains()只接受字符或字符串。任何其他可能性,如连接表。 – Sravan 2013-02-19 12:45:31

+0

@Sravan,不,它不会,尝试上面的代码,如果你的'record.Id'类型很长,这段代码应该可以工作。 – Habib 2013-02-19 12:46:38

+0

@Sravan,这个'selectedEmployeeIds.Contains(101)'也会返回true为您的示例代码 – Habib 2013-02-19 12:47:07