PrincipalSearchResult <Principal>, лямбда-выражения - PullRequest
1 голос
/ 21 марта 2009

Я пытаюсь отфильтровать сущности из principalcollection, используя, как мне кажется, лямбда-выражения.

Я не могу заставить это работать, я не получаю никаких результатов. user.GetGroups() возвращает все группы, в которых пользователь является членом, но user.GetGroups().Where(....) ничего не возвращает.

Допустим, пользователь userprincipal user = Администратор
Допустим, MyFilterString = "Exchange"
Допустим, администратор входит в следующие группы:

Exchange Domain Servers
Exchange Services
Administrators
Enterprise Admins

Администраторы домена Администраторы схемы


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

Я ожидаю, что memberOfGroups теперь должен содержать 2 группы:

Exchange Domain Servers
Exchange Services

Но это заканчивается пустым, почтовый индекс, нада. Небольшая помощь очень ценится.

Саймон О. Олсен

Ответы [ 2 ]

2 голосов
/ 21 марта 2009

Если .Where является стандартом Enumerable.Where, то он никогда не вернет PrincipalSearchResult; поэтому as будет возвращать null каждый раз. Попробуйте использовать .ToList():

var memberOfGroups = user.GetGroups()
      .Where(g => g.SamAccountName.Contains(MyFilterString)).ToList()
0 голосов
/ 21 марта 2009

Полагаю, вам следует использовать IndexOf () , а не Contains () , например:

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

Вы можете переформулировать свой вопрос, чтобы быть более ясным!

...