首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PrincipalSearcher的复杂搜索滤波

基于PrincipalSearcher的复杂搜索滤波
EN

Stack Overflow用户
提问于 2016-09-20 19:03:05
回答 1查看 4.9K关注 0票数 1

我在Active Directory中使用PrincipalSearcher对象搜索特定的PrincipalSearcher值,因为我想返回UserPrincipal的值。我想知道如何将两个筛选器应用到该搜索中;一个是帐户名的开头,另一个是它不以_c结束。

目前,我可以搜索所有的结果,从xx开始使用xx*,但我不知道如何添加另一个搜索词,甚至应用一个搜索条件不等于。这就是我目前正在做的事情。

代码语言:javascript
复制
protected override void RunTests()
{
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "NAME", "OU=OUName",OU=name,DC=name,DC=net"))
    {
        UserPrincipal searchTemplate = new UserPrincipal(context);
        searchTemplate.Enabled = true;
        searchTemplate.SamAccountName = "xx*";

        PrincipalSearcher search = new PrincipalSearcher(searchTemplate);

        var principals = search.FindAll();
        int total = principals.Count();            

        int numInvalidUsers = RunChecks(principals, new Check[]{ 
            Check1    
            , Check2
            , Check3
        });

        Score = numInvalidUsers == 0 ? 1 : 0;
    }
}

我想的是,我需要在searchTemplate.SamAccountName中添加另一个参数,我只是不确定如何添加。

更新:,我在Reddit上和一个人交谈,他给了我一些有用的建议,但是这个用户已经变黑了。似乎最常见的建议是以某种方式实现LDAP过滤器。因此,如果有人知道如何在返回主体对象的同时实现这些对象,这将是非常有帮助的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 17:41:09

所以我终于在Reddit用户从这个岗位上的帮助下回答了这个问题

由于我的程序设置方式,理想情况下,我需要返回主体对象,尽管有些转换或转换是可用的。使用额外筛选返回主体对象的解决方案是使用LINQ语句来筛选返回的结果。

要合并LINQ语句,我所需要做的就是修改一行,即I search.FindAll();的行,如下所示,

代码语言:javascript
复制
var principals = search.FindAll().Where(p => !p.SamAccountName.EndsWith("_c", StringComparison.OrdinalIgnoreCase)).ToList();

因为最初的筛选是为了找到所有的xx*,所以我只需要删除以_c结尾的帐户,但是LINQ有很多筛选选项可用。

Reddit上的用户也给了我一些其他的建议,因为如果你有大量返回的结果需要过滤,LINQ可能会很慢,但是我选择了更快更简单的答案。如果你想看到这些建议,只需按照链接到Reddit帖子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39601928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档