假设以下Employee类(是的,我知道我不应公开公开列表,但这只是一个例子):
class Employee
{
public string Name {get; set;}
public List<string> Skills {get; set;}
}
技能只是员工的技能列表,例如“编程”,“客户服务”等。
现在假设我有一个List<Employee> CurrentEmployees
,我还有另一名员工,Employee NewHire
不在CurrentEmployees
列表中。
我的目标是使用lambda表达式来计算CurrentEmployees
中至少有一项NewHire
技能的员工的数量。例如,如果CurrentEmployees
包含一名Skills{'Programming', 'Troubleshooting'}
员工,另一名员工Skills{'Accounting','Finance'}
,而NewHire有Skills{'Programming','Networking'}
,我希望表达式返回1,因为列表中的第一名员工也将“编程”作为一种技能......这可能吗?
感谢您的帮助。
答案 0 :(得分:3)
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
答案 1 :(得分:3)
currentEmployees.Count(ce =>
ce.Skills.Intersect(newHire.Skills).Any())
答案 2 :(得分:2)
如果表现很重要,我会使用HashSet<string>
:
var newHireSkills = new HashSet<string>(newHire.Skills);
var count = currentEmployees.Count(e => e.Skills.Any(s => newHireSkills.Contains(s)));