在包含对象属性的列表中查找

本文关键字:列表 查找 属性 包含 对象 | 更新日期: 2023-09-27 18:05:33

我想找出我的列表中哪些项目符合一定的标准。

我有一个List<Employee>,每个Employee都有一个List<Role>属性。每个Role都有一个ID作为属性。我试图找到列表中具有特定Role ID的所有Employee s。下面是我的非工作示例:

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

在包含对象属性的列表中查找

使用Enumerable。任何

var query = EmployeeList.Where(employee => employee.Roles
                                                   .Any(role => role.Id == roleID))
                                                   .ToList();

您可以将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])
{
    ....
}