0

我正在尝试查找列表中的哪些项目满足特定条件。

我有一个List<Employee>,每个Employee都有一个List<Role>属性。每个Role都有一个ID作为属性。我正在尝试查找列表Employee中具有特定值Role ID的所有 s。这是我的非工作样本:

var query = EmployeeList.Where(employee=> employee.Roles.Contains(role => role.ID == roleID)).ToList();
4

2 回答 2

6

使用Enumerable.Any

var query = EmployeeList.Where(employee => employee.Roles
                                                   .Any(role => role.Id == roleID))
                                                   .ToList();
于 2013-03-25T06:47:16.090 回答
4

您可以将您的更改ContainsAny(因为您只是在检查员工的任何角色是否符合您的条件):

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])
{
    ....
}
于 2013-03-25T06:47:19.663 回答