Lambda 中的子查询
本文关键字:查询 Lambda | 更新日期: 2023-09-27 18:33:02
我正在得到
这是我对SQL服务器的查询,我试图将其转换为
select * from Permission Where PermissionId in(select PermissionId from RoleDetail where RoleId =1)
这是我的初始 lambda 子查询
from p in Permissions
let rde = from rd in RoleDetails
select rd.PermissionId
where p.PermissionId ==1
select p
但它只向我显示一条附加了该角色的记录,但实际上它有 5 个权限,请帮忙。
也许试试这个? 与其尝试使用.Contains()
,不如在两个表上做一个连接......
from p in Permissions
join rd in RoleDetails on p.PermissionId equals rd.PermissionId
where rd.RoleId == 1
select p;
你做错了,这样做:
from p in Permissions
let rde = (from rd in RoleDetails
where rd.RoleId ==1
select rd.PermissionId)
where p.PermissionId = rde
select p
在此处查看 LET 用法
使用 join(在其他答案中提出)更好,但要修复您的查询,您应该过滤rde
RoleId = 1
然后用rde
过滤Permissions
:
from p in Permissions
let rde = from rd in RoleDetails
where rd.RoleId == 1 // filter RoleId = 1
select rd.PermissionId
where rde.Contains(p.PermissionId) // rde should contain p.PermissionId
select p
使用 Join
:-
var result = from p in Permissions
join rd in RoleDetails.Where(x => x.RoleId == 1)
on p.PermissionId equals rd.PermissionId
select p;