2014-12-04 68 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