Linq Count Выражение - PullRequest
       2

Linq Count Выражение

0 голосов
/ 24 июня 2011

Предположим, следующий класс Employee (да, я знаю, что не должен публично раскрывать списки, но это всего лишь пример):

class Employee
{
    public string Name {get; set;}
    public List<string> Skills {get; set;}
}

Навыки - это просто список навыков, которыми обладает сотрудник, например "программирование "," обслуживание клиентов "и т. д.

Теперь предположим, что у меня есть List<Employee> CurrentEmployees, и у меня есть еще один сотрудник, Employee NewHire, которого нет в списке CurrentEmployees.

Моя цель - использовать лямбда-выражение, чтобы подсчитать, сколько сотрудников в CurrentEmployees имеют хотя бы один навык, который есть у NewHire.Так, например, если CurrentEmployees содержит одного сотрудника с Skills{'Programming', 'Troubleshooting'}, а другого сотрудника с Skills{'Accounting','Finance'}, а NewHire имеет Skills{'Programming','Networking'}, я хотел бы получить выражение, которое возвращает 1, потому что первый сотрудник в списке также имеет 'Программирование как навык ... это возможно?

Спасибо за любую помощь.

Ответы [ 3 ]

3 голосов
/ 24 июня 2011
 currentEmployees.Count(ce =>
               ce.Skills.Intersect(newHire.Skills).Any())
3 голосов
/ 24 июня 2011
var currentEmployees = new List<Employee>
{
    new Employee { Skills = new List<string> { "Programming", "Troubleshooting" } },
    new Employee { Skills = new List<string> { "Accounting", "Finance" } },
};

var newHire = new Employee { Skills = new List<string> { "Programming", "Networking" } };

var count = currentEmployees.Count(e => e.Skills.Any(newHire.Skills.Contains));
// count == 1
2 голосов
/ 24 июня 2011

Если бы производительность была важна, я бы использовал HashSet<string>:

var newHireSkills = new HashSet<string>(newHire.Skills);

var count = currentEmployees.Count(e => e.Skills.Any(s => newHireSkills.Contains(s)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...