2009-03-21 7 views
1

J'essaie de filtrer les entités d'un principalcollection en utilisant ce que je pense est appelé expressions lambda.PrincipalSearchResult <Principal>, Expressions lambda

Je ne peux pas obtenir ce travail, je n'obtiens aucun résultat. user.GetGroups() renvoie tous les groupes dont l'utilisateur est membre, mais user.GetGroups().Where(....) ne renvoie rien.

Disons que l'utilisateur UserPrincipal = Administrateur
permet de dire MyFilterString = "Echange"
permet de dire que l'administrateur est membre des groupes suivants:

Exchange Domain Servers 
Exchange Services 
Administrators 
Enterprise Admins 

Domain Admins Admins schéma

 

UserPrincipal user = new UserPrincipal(MyActiveDirectoryContext); 
.. 
.. 
PrincipalSearchResult<Principal> memberOfGroups = user.GetGroups().Where(g => g.SamAccountName.Contains(MyFilterString) == true) as PrincipalSearchResult<Principal>; 
 

Ce que je m'attend à ce que memberOfGroups devrait maintenant contenir 2 groupes:

Exchange Domain Servers 
Exchange Services 

Mais il finit vide, zip zéro, nada. Un petit coup de main est très apprécié.

Simon O. Olsen

Répondre

0

Je suppose que vous devez utiliser IndexOf() et non Contient() comme ceci:

PrincipalSearchResult memberOfGroups = user.GetGroups().Where(g => >g.SamAccountName.IndexOf(MyFilterString) > -1) as PrincipalSearchResult; 

vous pouvez reformuler votre question pour être plus claire !

2

Si .Where est le Enumerable.Where standard, alors il ne renverra jamais un PrincipalSearchResult; donc as renverra null à chaque fois. Pensez à utiliser .ToList():

var memberOfGroups = user.GetGroups() 
     .Where(g => g.SamAccountName.Contains(MyFilterString)).ToList() 
Questions connexes