将列表中的元素组与字典的所有元素进行匹配

时间:2013-06-18 23:28:37

标签: c# .net linq

我的UserSkills表包含辅助密钥UserId,SkillId,SkillLevlelId。此表与UserSkill - 用户多对一关系。然后我有SkillId和SkillLevelId的字典。我想拿UserSkills给予Dictionary的用户。 请帮我写Linq to Entity。 我的Db计划https://dl.dropboxusercontent.com/u/85460129/quest.jpg

以下是对此问题的更好描述:

enter image description here

1 个答案:

答案 0 :(得分:1)

我解雇了LinqPad(你应该在linqpad.com上得到它,这让事情变得简单了。)

您可以在https://gist.github.com/hoganlong/5811644

找到完整的解决方案

代码的有趣部分如下:

如何运作

首先我们按用户ID分组。然后我们将每个组连接到字典中的两个键。如果连接的结果与字典具有相同的计数,那么我们知道它与字典匹配,我们选择userID作为结果列表中的元素。

var result = userSkills.AsEnumerable()
      .GroupBy(userRow => userRow.Field<int>("UserId"))
      .Where(userGroup => userGroup
                .Join(skillList,
                      user => new { sID = user.Field<int>("SkillId"), slID = user.Field<int>("SkillLevelId") },
                      skill => new { sID = skill.Key, slID = skill.Value },
                      (user, skill) => true).Count() == skillList.Count())
      .Select(match => new { userID = match.Key });

产生了这个输出:

enter image description here