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 个权限,请帮忙。

Lambda 中的子查询

也许试试这个? 与其尝试使用.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;