我有带有辅助键 UserId、SkillId、SkillLevlelId 的表 UserSkills。此表具有关系 UserSkill - 用户多对一。然后我有 SkillId 和 SkillLevelId 的字典。我想获取 UserSkills 符合 Dictionary 的用户。请帮我将 Linq 写入实体。我的 Db 方案https://dl.dropboxusercontent.com/u/85460129/quest.jpg
这是对问题的更好描述:
我有带有辅助键 UserId、SkillId、SkillLevlelId 的表 UserSkills。此表具有关系 UserSkill - 用户多对一。然后我有 SkillId 和 SkillLevelId 的字典。我想获取 UserSkills 符合 Dictionary 的用户。请帮我将 Linq 写入实体。我的 Db 方案https://dl.dropboxusercontent.com/u/85460129/quest.jpg
这是对问题的更好描述:
我启动了 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 });
产生了这个输出: