C# LDAP与objectCategory查询问题
我想创建LDAP查询以按名称、位置和型号筛选打印机C# LDAP与objectCategory查询问题,c#,active-directory,ldap,directoryservices,C#,Active Directory,Ldap,Directoryservices,我想创建LDAP查询以按名称、位置和型号筛选打印机 deSearch.Filter = String.Format("(&(&(&(&(objectCategory=printQueue)(printername={0}))(location={1}))(driverName={2})))", queueName, location, modelNumber); 我创建了这个,但它没有正确运行 第一个问题是按所有搜索条件一起搜索 如果其中一个条件为空或null,
deSearch.Filter = String.Format("(&(&(&(&(objectCategory=printQueue)(printername={0}))(location={1}))(driverName={2})))", queueName, location, modelNumber);
我创建了这个,但它没有正确运行
欢迎所有想法您只需一名操作员即可。它们是LDAP筛选器表达式中的n元而非二进制运算符:
(&(objectCategory=printQueue)(printername={0})(location={1})(driverName={2}))
(RFC2254将&(或|)后面的定义为一组过滤器,而不是两个过滤器。这是我能理解他们为什么选择可怕的前缀符号的唯一原因。)
我个人会在这样的查询中提供“printQueue”作为参数
“*”将匹配任何属性值,但它要求属性实际存在,即objectClass要有这样一个属性。根据EJP回复,我在这里创建了相应的代码
StringBuilder filter=new StringBuilder("(&(objectClass=printQueue)");
if (!string.IsNullOrEmpty(queueName))
filter.Append("(printerName=*"+queueName+"*)") ;
if (!string.IsNullOrEmpty(location))
filter.Append("(location=*" + location + "*)");
if (!string.IsNullOrEmpty(modelNumber))
filter.Append("(driverName=*" + modelNumber + "*)");
filter.Append(")");
deSearch.Filter = filter.ToString();