2014-12-04 72 views
0

我越来越子查询中LAMBDA

这里是我的SQL Server的查询,而我试图转换成

select * from Permission Where PermissionId in(select PermissionId from RoleDetail where RoleId =1) 

这里是我最初的拉姆达子查询

from p in Permissions 
    let rde = from rd in RoleDetails 
     select rd.PermissionId 
     where p.PermissionId ==1 
     select p 

但其表现我只有一个记录附有该角色,但实际上它有5个权限请帮助。

+0

什么类型'rde'变量?也许它需要拉姆达像'rde.Contains(R => r.PermissionId == 1)'? – 2014-12-04 12:32:09

回答

2

也许尝试呢?而不是试图用.Contains(),只是做在两个表加入...

from p in Permissions 
join rd in RoleDetails on p.PermissionId equals rd.PermissionId 
where rd.RoleId == 1 
select p; 
+0

谢谢你救我的一天 – Felixerity 2014-12-04 13:51:27

1

使用Join: -

var result = from p in Permissions 
      join rd in RoleDetails.Where(x => x.RoleId == 1) 
      on p.PermissionId equals rd.PermissionId 
      select p; 
1

你做错了这样做:

from p in Permissions 
    let rde = (from rd in RoleDetails 
       where rd.RoleId ==1 
       select rd.PermissionId) 
where p.PermissionId = rde 
select p 

LET usage HERE

1

使用连接(在其他的建议swers)是更好的,但解决您的查询,您应该过滤rdeRoleId = 1然后过滤Permissionsrde

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