1

我有带有辅助键 UserId、SkillId、SkillLevlelId 的表 UserSkills。此表具有关系 UserSkill - 用户多对一。然后我有 SkillId 和 SkillLevelId 的字典。我想获取 UserSkills 符合 Dictionary 的用户。请帮我将 Linq 写入实体。我的 Db 方案https://dl.dropboxusercontent.com/u/85460129/quest.jpg

这是对问题的更好描述:

在此处输入图像描述

4

1 回答 1

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

产生了这个输出:

在此处输入图像描述

于 2013-06-19T00:13:55.080 回答