2010-05-21 7 views
2

Je ne suis pas sûr que j'aime la syntaxe de requête linq ... ce n'est tout simplement pas ma préférence. Mais je ne sais pas à quoi ressemblerait cette requête en utilisant des expressions lambda, quelqu'un peut-il m'aider?Convertir cette requête Linq de la syntaxe de la requête à l'expression 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 

Il y a un grand nombre à plusieurs entre les utilisateurs et les rôles de sécurité qui rend cette confusion supplémentaire.

Merci! Kelly

Répondre

5

Comme ceci:

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

Ahh ... SelectMany! Je vais lire à ce sujet. Merci beaucoup! – KellySandwiches

+1

ReSharper a une fonctionnalité intéressante qui traduit automatiquement la syntaxe de la requête en 'chaîne de méthode' et (parfois) vice versa. [note: je ne suis pas apparenté aux jetbrains] – jeroenh

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) 
Questions connexes