0

抱歉,我对 linq 有点陌生,但我认为这就是我需要帮助的...

我有一个对象列表 - 任务的员工 - 它具有专业领域作为员工对象中的整数列表。我需要能够仅针对具有某些专业领域的人员筛选员工列表。但是,我还希望能够根据员工匹配的专业领域的数量对员工进行排名。

我的想法是创建一个包含 (EmployeeID, Tag) 的列表,其中每个员工标签都有一个条目,然后将其加入我的搜索列表,然后按员工 ID 聚合,计数标签,然后按计数降序排序。

但是,我不知道如何创建该列表。如何获取(EmployeeID,Tag)列表?

我基本上有:

员工

  • EmployeeID 为整数
  • AreasOfExpertise 作为列表(整数)

我想要一份员工 ID 和 AreaOfExpertiseID 列表,每个员工的专业领域都有一个条目。

有人知道我会怎么做吗?

谢谢

4

3 回答 3

1

这是你正在寻找的东西吗?这将创建一个具有 2 个属性的匿名类型,但这很容易成为您想要的任何类型。

        var employees = new List<int>() { 1,2,3,4,5};
        var skills = new List<KeyValuePair<int, string>>() 
        { 
            new KeyValuePair<int, String>(1, "test"), 
            new KeyValuePair<int, string>(3, "test3"), 
            new KeyValuePair<int, string>(3, "test4") 
        };

        var list = 
        (
            from employee in employees 
            join skill in skills 
                on employee equals skill.Key 
            select new { employee, skill.Value }
        ).ToList();

编辑:没有更多关于你的代码当前是什么的信息,我只是猜测了一些类型,它们将显示如何访问属性和进行连接。如果您更新,我很高兴根据您的需求使其更具体。

是另一个可能对您有帮助的连接语法的好例子

干杯,

于 2012-07-17T21:04:28.040 回答
0

这是你想要的?

var emplist = new List<Employee>
            {
                new Employee { EmployeeId = 1, AreaOfExpertieseId = new List<int>() { 1, 2, 3, 4 } },
                new Employee { EmployeeId = 2, AreaOfExpertieseId = new List<int>() { 1, 2 } },
                new Employee { EmployeeId = 3, AreaOfExpertieseId = new List<int>() },
                new Employee { EmployeeId = 4, AreaOfExpertieseId = new List<int>() { 1,4 } },
            };
        var expertiseId = new[] {2,3}; //ExpertiseIds you want to search;
        var emps = emplist.Where(e => e.AreaOfExpertieseId.Exists(id => expertiseId.Contains(id)))
            .Select(e => new {e.EmployeeId, Rank = e.AreaOfExpertieseId.Count }).ToList();
于 2012-07-17T22:16:33.730 回答
0

我最终做了一些与这里的答案相关的事情,但略有不同。对不起,这是我的错,我对此有点陌生,没有提供有用的信息。我有这个:

Class Employee
    Public EmployeeID as Integer
    Public Skills as list(of Integer)
End Class

'Should turn a list of EmployeeID, MatchingSkillCount
Function FindEmployeesWithMatchingSkills(Employees as List(of Employee), SearchSkills as List(of Integer)) as IEnumerable(of KeyValuePair(of Integer, Integer))

End Function

但是,我想不通。在一些帮助下,我想出了这个,这似乎有效:

Function FindEmployeesWithMatchingSkills(Employees as List(of Employee), SearchSkills as List(of Integer)) as IEnumerable(of KeyValuePair(of Integer, Integer))
    Return (From e in Employees Select New KeyValuePair(Of Integer, Integer)(e.EmployeeID, e.Skills.Where(Function(s) SearchSkills.Contains(s)).Count)).OrderByDescending(Function(kvp) kvp.Value).Where(Function(kvp) kvp.Value > 0)
End Function

谢谢你们每一个人的帮助!

于 2012-07-18T15:44:32.337 回答