使用IN + AND或其他方式查询CAML

时间:2014-08-27 08:41:29

标签: sharepoint-2010 caml

我的问题是关于caml查询SP2010, 我有以下列:国家,角色,物种,物种,主题,文档类型,Searchtext。 用户可能会按国家/地区(多个>英国,法国,比利时)进行搜索,并键入文档名称,如Doc_num_one.txt,并添加其他条件,如角色,物种,物种,主题,文档类型。我尝试了不同的查询,但我想我一直坚持。 低于我到目前为止的尝试:

<Query>
    <Where>
        <In>
            <FieldRef Name="Country"/>
            <Values>
                <Value Type="Lookup">United Kingdom</Value>
                <Value Type="Lookup">Poland</Value>
                <Value Type="Lookup">Belgium</Value>
            </Values>
        </In>
    </Where>
</Query>

<Query>
    <Where>
        <And>
            <Eq>
                <FieldRef Name="Title" />
                <Value Type="Text">doc num two</Value>
            </Eq>
            <Or>
                <And>
                    <Eq>
                        <FieldRef Name="Country" />
                        <Value Type="Lookup">United Kingdom</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name="Role" />
                        <Value Type="Lookup">Super Admin</Value>
                    </Eq>
                </And>
                <And>
                    <Eq>
                        <FieldRef Name="Country" />
                        <Value Type="Lookup">Belgium</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name="Role" />
                        <Value Type="Lookup">Super Admin</Value>
                    </Eq>
                </And>
                <And>
                    <Eq>
                        <FieldRef Name="Country" />
                        <Value Type="Lookup">Poland</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name="Role" />
                        <Value Type="Lookup">Super Admin</Value>
                    </Eq>
                </And>
            </Or>
        </And>
    </Where>
</Query>

解决方案:

<Query>
<Where>
<And>
 <In>
 <FieldRef Name="Country"/>
 <Values>
  <Value Type="Lookup">United Kingdom</Value>
  <Value Type="Lookup">Poland</Value>
  <Value Type="Lookup">Belgium</Value>
 </Values>
 </In>
<In>
 <FieldRef Name="Role"/>
 <Values>
  <Value Type="Lookup">Super Admin</Value>
  <Value Type="Lookup">Admin</Value>
  <Value Type="Lookup">User</Value>
 </Values>
 </In>
</And>
</Where>
</Query>

1 个答案:

答案 0 :(得分:1)

第二个查询不起作用,因为它在<Or>元素中有两个以上的子元素。如果要测试更多子条件,则必须引入辅助元素:

<Or>
    <And>...</And>
    <And>...</And>
    <And>...</And>
    <And>...</And>
    <And>...</And>
</Or>

变为

<Or>
    <And>...</And>
    <Or>
        <And>...</And>
        <Or>
            <And>...</And>
            <Or>
                <And>...</And>
                <And>...</And>
            </Or>
        </Or>
    </Or>
</Or>

同样适用于<And>元素。