我有有效的示例代码来查询与某个部门编号匹配的所有用户,并为每个用户回显所有关联的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
循环中的其他处理来过滤初始结果集,但是我正在努力提高效率。
答案 0 :(得分:1)
为了为LDAP搜索指定多个搜索条件,您需要使用LDAP search filter syntax(在链接的文档中进行了详细说明)。
基本上,如果您需要两个条件,则搜索过滤器将类似于:
(&(departmentnumber=123)(joblevel=5))
查看链接的文档以获取完整的说明和更多示例。