为什么where子句不适用于sharepoint搜索?

时间:2013-05-17 07:55:25

标签: asp.net sharepoint full-text-search

StringBuilder xmlString = new StringBuilder(
    "<QueryPacket xmlns='urn:Microsoft.Search.Query'>"
    + "<Query><SupportedFormats><Format revision='1'> urn:Microsoft.Search.Response.Document:Document"
    + "</Format></SupportedFormats><Context>"
    + " <QueryText language='en-US' type='FQL'>");

// this adds the search free form text 
xmlString.Append("Earth");
query.Append(
    "</QueryText></Context>"
    + "<Properties>"
    + "<Property name='Name'/>"
    + "<Property name='Department' />"
    + "<Property name='Property1' />"                
    + "<Property name='Property2' />"
    + "<Property name='Property3' />"
    + "<Property name='Property4' />"
    + "<Property name='Property5' />"
    + "</Properties>"
    + "<Where>"
    + "<IsNotNull><FieldRef Name='Name'></FieldRef></IsNotNull>"
    + "<And><IsNotNull><FieldRef Name='Property1'></FieldRef></IsNotNull></And>"
    + "</Where>"                                       
    + "</Query></QueryPacket>"
);

QueryServiceSoapClient.QueryEx(query)

我在Name和Property1列上获取null / empty值的数据。 为什么哪里不起作用?

3 个答案:

答案 0 :(得分:2)

看起来你的where子句没有正确格式化为@Damith建议。为什么不使用FAST Search for Sharepoint MOSS 2010 Query Tool构建查询。它非常快速有效地完成这类任务。

答案 1 :(得分:0)

+ "<And><IsNotNull><FieldRef Name='Property1'></FieldRef>"+"</IsNotNull>And>"

IsNotNull之后的这一行中,您错过了</,因此该行应为

+ "<And><IsNotNull><FieldRef Name='Property1'></FieldRef>"+"</IsNotNull></And>"

答案 2 :(得分:0)

您的问题是您的<and>条款位于错误的位置。

它应该是这样的:

 <Where>
    <And>
        <IsNotNull>
            <FieldRef Name='Name'>
            </FieldRef>
         </IsNotNull>
         <IsNotNull>
             <FieldRef Name='Property1'></FieldRef>
         </IsNotNull>
    </And>
</Where> 

我知道,这是一个奇怪的地方必须放入和子句,但这就是CAML的工作原理。如果您打算使用CAML而不是Linq,我强烈建议您使用CAMLQueryHelper之类的程序。