Linq Count Выражение
Предположим, следующий класс 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 ответа
currentEmployees.Count(ce =>
ce.Skills.Intersect(newHire.Skills).Any())
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
Если бы производительность была важна, я бы использовал HashSet<string>
:
var newHireSkills = new HashSet<string>(newHire.Skills);
var count = currentEmployees.Count(e => e.Skills.Any(s => newHireSkills.Contains(s)));