向 LDAP 搜索添加多个条件

Adding multiple criteria to LDAP searches

我有功能示例代码来查询与特定部门编号匹配的所有用户,并为每个用户回显所有关联的 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();

但是,我想在初始搜索中添加多个条件(例如 Return 所有具有 "departmentnumber" 属性匹配“123”和 "joblevel" 属性匹配“5”的用户。”我无法找到向 DirectorySearcher.

提供复合过滤条件的正确方法

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

为了为 LDAP 搜索指定多个搜索条件,您需要使用 LDAP search filter syntax(在链接文档中有详细描述)。

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

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

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