2011-02-15 49 views
1

我要创建LDAP查询,以滤除名称和位置,模型LDAP与objectCategory查询问题

deSearch.Filter = String.Format("(&(&(&(&(objectCategory=printQueue)(printername={0}))(location={1}))(driverName={2})))", queueName, location, modelNumber); 

我创建这个打印机,但它没有正确运行

  1. 的第一个问题是一起搜索所有搜索条件
  2. 如果其中一个条件为空或为空,我将它设置为*以获得所有结果。是否正确?

所有的想法都欢迎

回答

2

你只需要一个&运营商。他们正元,不是二进制,在LDAP过滤器表达式运算符:

(&(objectCategory=printQueue)(printername={0})(location={1})(driverName={2})) 

(RFC 2254定义了如下&(或|)作为过滤器的设置,而不是正好有两个过滤器这是关于。只有很好的理由,我可以看到他们为什么选择这种可怕的前缀符号。)

我个人将“printQueue”作为参数提供给这样的查询。

'*'将匹配任何属性值,但它要求该属性实际存在,即objectClass为具有这样的属性。

+0

感谢您支持我做到了,它正常运行 – 2011-02-16 02:40:28

0

Accoroding到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();