我正在尝试查找列表中的哪些项目符合某个条件。
我有一个List<Employee>
,每个Employee
都有一个List<Role>
属性。每个Role
都有ID
作为属性。我正在尝试查找列表中具有特定Employee
的所有Role ID
。这是我的非工作样本:
var query = EmployeeList.Where(employee=> employee.Roles.Contains(role => role.ID == roleID)).ToList();
答案 0 :(得分:6)
var query = EmployeeList.Where(employee => employee.Roles
.Any(role => role.Id == roleID))
.ToList();
答案 1 :(得分:4)
您只需将Contains
更改为Any
(因为您只是检查员工角色的任何是否符合您的条件):
var query = EmployeeList.Where(employee => employee.Roles
.Any(role => role.ID == roleID))
.ToList();
请注意,这不是一种非常有效的方法 - 必须检查每个员工,以及每个员工的每个角色。如果您需要经常使用同一组员工但角色ID不同,则可以从角色ID到员工构建查找:
var lookup = EmployeeList.SelectMany(e => e.Roles,
(e, r) => new { Employee = e, Role = e })
.ToLookup(pair => pair.Role.ID,
pair => pair.Employee);
然后你可以使用:
foreach (var employee in lookup[roleID])
{
....
}