1

我正在尝试principalcollection使用我认为所谓的 lambda 表达式从 a 中过滤掉实体。

我不能让它工作,我没有得到任何结果。 user.GetGroups()返回用户是成员的所有组,但user.GetGroups().Where(....)不返回任何内容。

假设 userprincipal user = Administrator
假设 MyFilterString = "Exchange"
假设 Administrator 是以下组的成员:

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

但它最终是空的,拉链为零,nada。非常感谢您的帮助。

西蒙·O·奥尔森

4

2 回答 2

2

如果.Where是标准Enumerable.Where,那么它永远不会返回 a PrincipalSearchResult; 所以每次as都会回来。null考虑使用.ToList()

var memberOfGroups = user.GetGroups()
      .Where(g => g.SamAccountName.Contains(MyFilterString)).ToList()
于 2009-03-21T11:45:06.810 回答
0

我想你应该像这样使用IndexOf()而不是Contains()

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

您可能想重新表述您的问题,使其更清晰!

于 2009-03-21T11:31:14.113 回答