gpt4 book ai didi

c# - 从 EF6 中的多对多连接表返回一列

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:14 25 4
gpt4 key购买 nike

我需要从 EF6 中的多对多关系中的联接表返回单个列

User { Id, Name}
Role { Id, Role}
UserToRole { UserId, RoleId}

这是一个简化的示例,但我需要从用户那里获取 RoleId (Role.Id) 的列表。

理想情况下我会做类似的事情

context.UserToRole.Where(x => x.UserId == id).Select(r => r.RoleId).ToList();

但 EF 似乎没有向我提供该连接表作为查询对象。

我知道我可以将所有角色作为对象提取出来,但在我的实际系统中这是一个宽表,我想避免通过网络提取所有数据并将其放入内存的开销。

最佳答案

如果您只需要来自 UserRolesId,您可以执行此查询:

 int userId=1;
var roleIds = db.Users.Where(u => u.Id == userId).SelectMany(u => u.Roles.Select(a=>a.Id));

这将生成这样的 sql 查询:

 {SELECT [Extent1].[Role_Id] AS [Role_Id]
FROM [dbo].[UserRoles] AS [Extent1]
WHERE [Extent1].[User_Id] = @p__linq__0}

如您所见,查询与您查找的相同。

关于c# - 从 EF6 中的多对多连接表返回一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com