CAML查询“And-Or-In”语句的多个分支

时间:2014-06-23 16:57:54

标签: sharepoint sharepoint-2010 caml

我正在使用CAML查询从列表中提取项目。

我尝试重新安排查询结构,但仍然不会返回任何内容。我尽量不使用CAMLQuery Builder(手动完成)。

<Query>
    <Where>
        <And>
            <Contains>
                <FieldRef Name="Field1"/><Value Type="Text">A</Value>
            </Contains>
            <And>
                <In>
                    <FieldRef Name="Field2"/><Values><Value Type="Text">B</Value></Values>
                </In>
                <Or>
                    <In>
                        <FieldRef Name="Field3"/><Values><Value Type="Text">C</Value></Values>
                    </In>
                    <In>
                        <FieldRef Name="Field4"/><Values><Value Type="Text">D</Value></Values>
                    </In>
                </Or>
            </And>
        </And>
    </Where>
</Query>

注意:我看到的问题似乎与此相似,但从未见过像这种分支水平一样深的问题。 CAML查询似乎特别适用于放置结束标记的位置。

我是否错误地嵌入了“And”和“Or”?这个查询中可能有什么错误/缺失?

1 个答案:

答案 0 :(得分:0)

虽然您的CAML对我有用(没有实际的<FieldRef><Value>元素,但我无法专门测试您的字段名称,类型和值),我倾向于编写我的CAML在一个更平衡的&#34;时尚,如此:

<Query>
    <Where>
        <And>
            <And>
                <Contains>A</Contains>
                <In>B</In>
            </And>
            <Or>
                <In>C</In>
                <In>D</In>
            </Or>
        </And>
    </Where>
</Query>

根据规范,您的发布版本和我在这里的回答会得到相同的结果,但我会测试确认。如果上述方法不起作用,除了简洁之外,我建议发布您的完整CAML,以便我们可以使用相同的字段名称重新创建您的列表&amp;具有匹配值的类型和测试数据。