簡體   English   中英

Linq計數表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM