C# LDAP与objectCategory查询问题

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,

我想创建LDAP查询以按名称、位置和型号筛选打印机

deSearch.Filter = String.Format("(&(&(&(&(objectCategory=printQueue)(printername={0}))(location={1}))(driverName={2})))", queueName, location, modelNumber);
我创建了这个,但它没有正确运行

  • 第一个问题是按所有搜索条件一起搜索
  • 如果其中一个条件为空或null,我将其设置为*以获得所有结果。是否正确

  • 欢迎所有想法

    您只需一名操作员即可。它们是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();