Pre*_*ott 1 c# entity-framework entity-framework-6
我需要在EF6中以多对多的关系从连接表中返回单个列
User { Id, Name}
Role { Id, Role}
UserToRole { UserId, RoleId}
Run Code Online (Sandbox Code Playgroud)
这是一个简化的示例,但我需要从User获取RoleId(Role.Id)的列表.
理想情况下,我只是做类似的事情
context.UserToRole.Where(x => x.UserId == id).Select(r => r.RoleId).ToList();
Run Code Online (Sandbox Code Playgroud)
但EF似乎并没有为我提供该连接表作为查询对象.
我知道我可以将所有角色作为对象拉下来,但在我的实际系统中,这是一个宽表,我想避免将所有数据拉到线上并将其放入内存的开销.
如果只需要RolesIdfrom,则User可以执行此查询:
int userId=1;
var roleIds = db.Users.Where(u => u.Id == userId).SelectMany(u => u.Roles.Select(a=>a.Id));
Run Code Online (Sandbox Code Playgroud)
这将生成一个像这样的SQL查询:
{SELECT [Extent1].[Role_Id] AS [Role_Id]
FROM [dbo].[UserRoles] AS [Extent1]
WHERE [Extent1].[User_Id] = @p__linq__0}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,是您查找的查询.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |