2010-05-21 80 views
2

我不确定我喜欢linq查询语法......它只是不是我的偏好。但我不知道这个查询使用lambda表达式的样子,有人可以帮忙吗?将此Linq查询从查询​​语法转换为lambda表达式

from securityRoles in user.SecurityRoles 
from permissions in securityRoles.Permissions 
where permissions.SecurableEntity.Name == "Unit" && permissions.PermissionType.Name == "Read" 
orderby permissions.PermissionLevel.Value descending 
select permissions 

用户和安全角色之间存在多对多的关系,这使得这种额外的混淆。

谢谢! 凯利

回答

5

像这样:

user.SecurityRoles.SelectMany(securityRoles => securityRoles.Permissions) 
        .Where(permissions => permissions.SecurableEntity.Name == "Unit" && permissions.PermissionType.Name == "Read") 
        .OrderByDescending(permissions => permissions.PermissionLevel.Value) 
+0

啊...的SelectMany!我会详细阅读。非常感谢! – KellySandwiches 2010-05-21 04:39:52

+1

ReSharper有一个很好的功能,可以自动将查询语法翻译为'方法链',有时(反之亦然)。 [注:我与jetbrains无关] – jeroenh 2010-05-23 23:09:00

1
 user.SecurityRoles.SelectMany(securityRoles => securityRoles.Permissions, 
             (securityRoles, permissions) => new {securityRoles, permissions}).Where(
      @t => permissions.SecurableEntity.Name == "Unit" && permissions.PermissionType.Name == "Read").OrderByDescending(
      @t => permissions.PermissionLevel.Value).Select(@t => permissions)