PrincipalSearchResult <principal>,Lambda Expressions </principal>

时间:2009-03-21 10:59:51

标签: c# lambda ienumerable

我正在尝试使用我认为称为lambda表达式的principalcollection过滤掉实体。

我无法让这个工作,我没有结果。 user.GetGroups()返回用户所在的所有组,但user.GetGroups().Where(....)不返回任何内容。

让我们说userprincipal user = Administrator
让我们说MyFilterString =“交换”
假设管理员是以下组的成员:

Exchange Domain Servers
Exchange Services
Administrators
Enterprise Admins

Domain 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

但它最终为空,拉链零,虚无... 非常感谢一点帮助。

Simon O. Olsen

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我猜您应该使用 IndexOf()而不是包含(),如下所示:

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

您可能希望重新表述您的问题,以便更清楚!