Linq to Entities:多对多连接表和视图

时间:2010-06-15 13:55:43

标签: .net linq-to-entities inner-join

我有几张桌子和一个视图:

表:
- aspnet_Roles(使用RoleId和其他列)
- Status(使用StatusId和其他列)
- RoleStatus(具有RoleId和StatusId及关系)

当我创建Linq To Entities EDMX文件时,它会创建2个实体,Status中的aspnet_Roles列表属性和aspnet_Roles中的Status列表。
到目前为止确定。

但现在我有一个StatusId列的视图。

我想要的是创建一个LINQ查询,在该视图与aspnet_Roles表之间使用连接,以在结果集中添加RoleName列。

在SQL中它将类似于:

Select a.*, aspnet_Roles.RoleName From SearchView a
INNER JOIN RoleStatus ON a.StatusId = RoleStatus.StatusId
INNER JOIN aspnet_Roles ON RoleStatus.RoleId = aspnet_Roles.RoleId

但我无法在LINQ to Entities中找到如何做到这一点。 问题是我永远无法访问RoleIdStatusId,因为这些字段已被aspnet_RolesStatus列表属性“替换”。

所以我得到了这样的LINQ:

from avis in ctx.SearchView 
join joinedRoles in ctx.aspnet_Roles
on avis.StatusId equals joinedRoles.Status. (and then what ??)

由于状态是一个列表,我找不到与StatusId匹配的内容。

我认为我做错了但我不知道在哪里。

1 个答案:

答案 0 :(得分:1)

首先,我建议升级到EF4;他们添加了“外键关联”,因此我们现在除了引用之外还有* Id字段。

其次,您的视图是否映射到设计器中的实体?应该可以在视图和状态表之间添加关联。 (我实际上并没有这样做,但我相信这会有效。)