具有多个或条件的 CAMLQuery?
CAMLQuery with multiple or conditions?
我正在尝试在下面的 CAMLQuery 中添加另一个 OR 条件,但似乎没有任何效果。有人可以帮忙吗?
这是现有的工作查询。我正在尝试添加另一个 Or 条件,以便查询是 (Permissions_Type = x1 OR Permissions_Type = x2) AND (Category = y1 OR Category = y2) AND (User_Specific = z1 或 User_Specific = z2)。
<Query>
<Where>
<And>
<And>
<Or>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">User</Value>
</Eq>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">Superuser</Value>
</Eq>
</Or>
<Or>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Survey</Value>
</Eq>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Notification</Value>
</Eq>
</Or>
</And>
<Geq>
<FieldRef Name="Event_End" />
<Value Type="DateTime"><Today Offset="-1" /></Value>
</Geq>
</And>
</Where>
<OrderBy><FieldRef Name="Created" Ascending="FALSE" /></OrderBy>
</Query>
我希望这是我的附加条件...或多或少 User_Specific 为空或 User_Specific = z
<Or>
<IsNull><FieldRef Name="User_Specific"/></IsNull>
<Eq>
<FieldRef Name="User_Specific"/>
<Value Type="Number">9</Value>
</Eq>
</Or>
记住每个 <And>
和 <Or>
节点需要 正好 两个子节点。
当您有两个以上的 AND 或 OR 条件时,您需要根据需要使用嵌套的 <And>
和 <Or>
节点将它们组合起来。
当您规划您的逻辑时,将 AND 和 OR 视为每个只接受两个参数的函数可能会有所帮助:
AND(
OR(permissions=user, permissions=superuser),
AND(
OR(category=survey, category=notification),
OR(user_specific=z1, user_specific=z2)
)
)
当您将其转换为 CAML 时,您将得到如下结果:
<Where>
<And>
<And>
<Or>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">User</Value>
</Eq>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">Superuser</Value>
</Eq>
</Or>
<And>
<Or>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Survey</Value>
</Eq>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Notification</Value>
</Eq>
</Or>
<Or>
<IsNull><FieldRef Name="User_Specific"/></IsNull>
<Eq>
<FieldRef Name="User_Specific"/>
<Value Type="Number">9</Value>
</Eq>
</Or>
</And>
</And>
<Geq>
<FieldRef Name="Event_End" />
<Value Type="DateTime"><Today Offset="-1" /></Value>
</Geq>
</And>
</Where>
(最后我不得不为你的 <Geq>
条件添加一个额外的 <And>
。)
我正在尝试在下面的 CAMLQuery 中添加另一个 OR 条件,但似乎没有任何效果。有人可以帮忙吗?
这是现有的工作查询。我正在尝试添加另一个 Or 条件,以便查询是 (Permissions_Type = x1 OR Permissions_Type = x2) AND (Category = y1 OR Category = y2) AND (User_Specific = z1 或 User_Specific = z2)。
<Query>
<Where>
<And>
<And>
<Or>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">User</Value>
</Eq>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">Superuser</Value>
</Eq>
</Or>
<Or>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Survey</Value>
</Eq>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Notification</Value>
</Eq>
</Or>
</And>
<Geq>
<FieldRef Name="Event_End" />
<Value Type="DateTime"><Today Offset="-1" /></Value>
</Geq>
</And>
</Where>
<OrderBy><FieldRef Name="Created" Ascending="FALSE" /></OrderBy>
</Query>
我希望这是我的附加条件...或多或少 User_Specific 为空或 User_Specific = z
<Or>
<IsNull><FieldRef Name="User_Specific"/></IsNull>
<Eq>
<FieldRef Name="User_Specific"/>
<Value Type="Number">9</Value>
</Eq>
</Or>
记住每个 <And>
和 <Or>
节点需要 正好 两个子节点。
当您有两个以上的 AND 或 OR 条件时,您需要根据需要使用嵌套的 <And>
和 <Or>
节点将它们组合起来。
当您规划您的逻辑时,将 AND 和 OR 视为每个只接受两个参数的函数可能会有所帮助:
AND(
OR(permissions=user, permissions=superuser),
AND(
OR(category=survey, category=notification),
OR(user_specific=z1, user_specific=z2)
)
)
当您将其转换为 CAML 时,您将得到如下结果:
<Where>
<And>
<And>
<Or>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">User</Value>
</Eq>
<Eq>
<FieldRef Name="Permissions_Type"/>
<Value Type="Lookup">Superuser</Value>
</Eq>
</Or>
<And>
<Or>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Survey</Value>
</Eq>
<Eq>
<FieldRef Name="Category"/>
<Value Type="Text">Notification</Value>
</Eq>
</Or>
<Or>
<IsNull><FieldRef Name="User_Specific"/></IsNull>
<Eq>
<FieldRef Name="User_Specific"/>
<Value Type="Number">9</Value>
</Eq>
</Or>
</And>
</And>
<Geq>
<FieldRef Name="Event_End" />
<Value Type="DateTime"><Today Offset="-1" /></Value>
</Geq>
</And>
</Where>
(最后我不得不为你的 <Geq>
条件添加一个额外的 <And>
。)