向LDAP搜索添加多个条件

时间:2019-02-17 04:26:05

标签: c# .net ldap

我有有效的示例代码来查询与某个部门编号匹配的所有用户,并为每个用户回显所有关联的LDAP属性:

string attribute = "departmentnumber";
string value = "123";

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://ldap.acme.com:389");
rootEntry.AuthenticationType = AuthenticationTypes.None;

DirectorySearcher searcher = new DirectorySearcher(rootEntry, $"({attribute}={value})");

SearchResultCollection results = searcher.FindAll();

foreach (SearchResult result in searcher.FindAll())
{
    var allLDAPProperties = result.Properties.PropertyNames;

    foreach (var property in allLDAPProperties)
    {
        Console.WriteLine((result.Properties[property.ToString()].Count > 0 ? result.Properties[property.ToString()][0] : string.Empty).ToString());
    }

    Console.WriteLine(Environment.NewLine);
}

Console.ReadKey();

但是,我想在我的初始搜索中添加多个条件(例如,返回所有具有“部门编号”属性与“ 123”匹配且“职位级别”属性与“ 5”匹配的所有用户。我找不到正确的向DirectorySearcher提供复合过滤条件的方法。

我知道我可以通过foreach循环中的其他处理来过滤初始结果集,但是我正在努力提高效率。

1 个答案:

答案 0 :(得分:1)

为了为LDAP搜索指定多个搜索条件,您需要使用LDAP search filter syntax(在链接的文档中进行了详细说明)。

基本上,如果您需要两个条件,则搜索过滤器将类似于:

(&(departmentnumber=123)(joblevel=5))

查看链接的文档以获取完整的说明和更多示例。