如何在linq中将以下SQL写入实体?我试图让所有用户都可以访问使用论坛组分配的论坛。
SELECT UsersInForumGroups.UserId FROM Forums
JOIN ForumsInForumGroups on Forums.ForumId = ForumsInForumGroups.ForumId
JOIN ForumGroups on ForumGroups.ForumGroupId = ForumsInForumGroups.ForumGroupId
JOIN UsersInForumGroups on UsersInForumGroups.ForumGroupId = ForumGroups.ForumGroupId
WHERE Forums.ForumId = 'blah'
我使用SQL外键设置所有关系,并且它们在实体框架中工作,例如这种语法有效。
db.ForumsInForumGroups.Select(x=>x.ForumGroup)
这里要求的是实体设置
答案 0 :(得分:1)
假设您的表格之间存在多对一关系,它可能如下所示:
var res = db.Forums.Include("ForumsInForumGroups.ForumGroups.UsersInForumGroups")
.Where(c => c.ForumId == "blah")
.Select(c => c.ForumsInForumGroups
.ForumGroups
.UsersInForumGroups
.UserId)
修改强>
没有必要Include
然后你选择通过关系:
var res = db.Forums.Where(c => c.ForumId == "blah")
.Select(c => c.ForumsInForumGroups
.ForumGroups
.UsersInForumGroups
.UserId)
编辑2
我是一个大胆的屁股:)
试试这个:
var res = db.Forums.Where(c => c.ForumId == "blah")
.SelectMany(c => c.ForumsInForumGroups
.SelectMany(q => q.ForumGroups.UsersInForumGroups
.Select(z => z.UserId)
)
);