Asp.net 使用Linq将对象的列表与其ID连接起来
对不起,我对linq有点陌生,但我想这就是我需要帮助的地方 我有一个对象列表-任务的员工-它有专门领域作为员工对象中的整数列表。我需要能够过滤的员工名单,只有那些与某些领域的专业知识。但是,我也希望能够根据员工所匹配的专业领域对他们进行排名 我的想法是创建一个带有EmployeeID的列表,为每个employee标记一个条目,然后将其与我的搜索列表连接,然后按employee ID聚合,计数标记,然后按计数降序排序 但是,我不知道如何创建该列表。如何获取员工ID和标签列表 我基本上有: 雇员 EmployeeID为整数 作为整数列表的区域 我想要一个员工ID和AreaOfExpertiseID的列表,每个员工的专业领域都有一个条目 有人知道我会怎么做吗Asp.net 使用Linq将对象的列表与其ID连接起来,asp.net,vb.net,linq,Asp.net,Vb.net,Linq,对不起,我对linq有点陌生,但我想这就是我需要帮助的地方 我有一个对象列表-任务的员工-它有专门领域作为员工对象中的整数列表。我需要能够过滤的员工名单,只有那些与某些领域的专业知识。但是,我也希望能够根据员工所匹配的专业领域对他们进行排名 我的想法是创建一个带有EmployeeID的列表,为每个employee标记一个条目,然后将其与我的搜索列表连接,然后按employee ID聚合,计数标记,然后按计数降序排序 但是,我不知道如何创建该列表。如何获取员工ID和标签列表 我基本上有: 雇员 E
谢谢这就是你要找的东西吗?这将生成一个具有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-如果答案对你有帮助或解决了你的问题,别忘了接受它。