Asp.net 使用Linq将对象的列表与其ID连接起来

Asp.net 使用Linq将对象的列表与其ID连接起来,asp.net,vb.net,linq,Asp.net,Vb.net,Linq,对不起,我对linq有点陌生,但我想这就是我需要帮助的地方 我有一个对象列表-任务的员工-它有专门领域作为员工对象中的整数列表。我需要能够过滤的员工名单,只有那些与某些领域的专业知识。但是,我也希望能够根据员工所匹配的专业领域对他们进行排名 我的想法是创建一个带有EmployeeID的列表,为每个employee标记一个条目,然后将其与我的搜索列表连接,然后按employee ID聚合,计数标记,然后按计数降序排序 但是,我不知道如何创建该列表。如何获取员工ID和标签列表 我基本上有: 雇员 E

对不起,我对linq有点陌生,但我想这就是我需要帮助的地方

我有一个对象列表-任务的员工-它有专门领域作为员工对象中的整数列表。我需要能够过滤的员工名单,只有那些与某些领域的专业知识。但是,我也希望能够根据员工所匹配的专业领域对他们进行排名

我的想法是创建一个带有EmployeeID的列表,为每个employee标记一个条目,然后将其与我的搜索列表连接,然后按employee ID聚合,计数标记,然后按计数降序排序

但是,我不知道如何创建该列表。如何获取员工ID和标签列表

我基本上有:

雇员

EmployeeID为整数 作为整数列表的区域 我想要一个员工ID和AreaOfExpertiseID的列表,每个员工的专业领域都有一个条目

有人知道我会怎么做吗


谢谢

这就是你要找的东西吗?这将生成一个具有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();
编辑: 没有更多关于您的代码当前是什么的信息,我只是猜测了一些类型,这些类型将显示如何访问属性和进行连接。如果你能更新,我很高兴能让它更符合你的需求

是连接语法的另一个很好的示例,可能会对您有所帮助


干杯,

这就是你要找的吗

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();

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

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

谢谢大家的帮助

太多的阅读,太多只有你知道的特殊术语。员工领域的专家,因此过于抽象。显示您的类和2-3个示例对象。也很难看出真正的问题或期望的输出是什么。谢谢-这非常有帮助。我最终使用了一种稍有不同的方法,但你的帖子内容丰富。@Mike-如果答案对你有帮助或解决了你的问题,别忘了接受它。