当 OR 中的变量超过 2 个时,CAML 查询错误
CAML Query error when more than 2 variables in OR
在我的 SharePoint CAML 查询中,当使用两个输入进行过滤时,它是成功的。但是,当我有3个或更多时,它失败了。
使用两个以上的输入时是否需要使用不同的格式?
通过(2 个字段):
<Where>
<And>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
</Or>
<Neq><FieldRef Name ="ContentType"/><Value Type="Text">Document</Value></Neq>
</And>
</Where>
失败(3 个字段):
<Where>
<And>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H3</Value></Eq>
</Or>
<Neq><FieldRef Name ="ContentType"/><Value Type="Text">Document</Value></Neq>
</And>
</Where>
错误:
Cannot complete this action. Please try again. at
Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx)
at
Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback2(IListItemSqlClient
pSqlClient, String bstrUrl, String bstrListName, String bstrViewName,
String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags,
ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback,
ISPDataCallback pPagingPrevCallback, ISPDataCallback
pFilterLinkCallback, ISPDataCallback pSchemaCallback, ISPDataCallback
pRowCountCallback, Boolean& pbMaximalView) at
Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData() at
Microsoft.SharePoint.SPListItemCollection.get_Count()
在 CAML 语法中,<Or>
和 <And>
以及 二元 运算符。因此它们必须只有两个操作数。如果您需要更多,则必须相应地嵌套它们。你的情况:
<Where>
<And>
<Or>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
</Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H3</Value></Eq>
</Or>
<Neq><FieldRef Name ="ContentType"/><Value Type="Text">Document</Value></Neq>
</And>
</Where>
在我的 SharePoint CAML 查询中,当使用两个输入进行过滤时,它是成功的。但是,当我有3个或更多时,它失败了。
使用两个以上的输入时是否需要使用不同的格式?
通过(2 个字段):
<Where>
<And>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
</Or>
<Neq><FieldRef Name ="ContentType"/><Value Type="Text">Document</Value></Neq>
</And>
</Where>
失败(3 个字段):
<Where>
<And>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H3</Value></Eq>
</Or>
<Neq><FieldRef Name ="ContentType"/><Value Type="Text">Document</Value></Neq>
</And>
</Where>
错误:
Cannot complete this action. Please try again. at Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx) at Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback2(IListItemSqlClient pSqlClient, String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pPagingPrevCallback, ISPDataCallback pFilterLinkCallback, ISPDataCallback pSchemaCallback, ISPDataCallback pRowCountCallback, Boolean& pbMaximalView) at Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData() at Microsoft.SharePoint.SPListItemCollection.get_Count()
在 CAML 语法中,<Or>
和 <And>
以及 二元 运算符。因此它们必须只有两个操作数。如果您需要更多,则必须相应地嵌套它们。你的情况:
<Where>
<And>
<Or>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
</Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H3</Value></Eq>
</Or>
<Neq><FieldRef Name ="ContentType"/><Value Type="Text">Document</Value></Neq>
</And>
</Where>