0

リスト内のどのアイテムが特定の基準を満たしているかを見つけようとしています。

私には、がList<Employee>あり、それぞれEmployeeList<Role>属性があります。それぞれRoleID属性としてがあります。Employeeリストに特定のものがあるすべてのを見つけようとしてRole IDいます。これが私の機能しないサンプルです:

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

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