我的UserSkills表包含辅助密钥UserId,SkillId,SkillLevlelId。此表与UserSkill - 用户多对一关系。然后我有SkillId和SkillLevelId的字典。我想拿UserSkills给予Dictionary的用户。 请帮我写Linq to Entity。 我的Db计划https://dl.dropboxusercontent.com/u/85460129/quest.jpg
以下是对此问题的更好描述:
答案 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 });
产生了这个输出: