[英]Linq Count Expression
假設以下Employee類(是的,我知道我不應該公開公開List,但這只是一個示例):
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的表達式,因為列表中的第一位員工也具有“編程”技能……這可能嗎?
謝謝你的幫助。
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
currentEmployees.Count(ce =>
ce.Skills.Intersect(newHire.Skills).Any())
如果性能很重要,我將使用HashSet<string>
:
var newHireSkills = new HashSet<string>(newHire.Skills);
var count = currentEmployees.Count(e => e.Skills.Any(s => newHireSkills.Contains(s)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.