Linq与实体关系加入

时间:2013-12-10 12:41:00

标签: c# linq entity-framework

如何在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)

这里要求的是实体设置

enter image description here

enter image description here

1 个答案:

答案 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)
                                     )
                        );