我正在尝试使用我认为称为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
答案 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;
您可能希望重新表述您的问题,以便更清楚!