0

当我使用 CAML 过滤我的 ListView 时,我可以使用这个 CAML:

  query = "<Where><Or>" +
                    "<And>" +
                       " <Eq>" +
                            "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                            "<Value Type=\"Text\">Tag</Value>" +
                         "</Eq>" +
                         "<IsNotNull>" +
                         "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                         "</IsNotNull>" +
                    "</And>" +
                    "<And>" +
                       " <Eq>" +
                            "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                            "<Value Type=\"Text\">Word</Value>" +
                         "</Eq>" +
                         "<IsNotNull>" +
                         "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                         "</IsNotNull>" +
                    "</And>" + 
                    "</Or>" +
                 "</Where>";

它可以正常工作。

但是当我在下面使用 CAML 时,它会在 ListView 中显示错误

query = "<Where><Or>" +
                    "<And>" +
                       " <Eq>" +
                            "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                            "<Value Type=\"Text\">Tag</Value>" +
                         "</Eq>" +
                         "<IsNotNull>" +
                         "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                         "</IsNotNull>" +
                    "</And>" +
                    "<And>" +
                       " <Eq>" +
                            "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                            "<Value Type=\"Text\">Word</Value>" +
                         "</Eq>" +
                         "<IsNotNull>" +
                         "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                         "</IsNotNull>" +
                    "</And>" + 
                    "<And>" +
                       " <Eq>" +
                            "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                            "<Value Type=\"Text\">Word Test</Value>" +
                         "</Eq>" +
                         "<IsNotNull>" +
                         "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                         "</IsNotNull>" +
                    "</And>" +
                    "</Or>" +
                 "</Where>";

我只是在第二个 CAML 上添加了一个过滤器,为什么它不起作用?

有人可以帮忙吗?

谢谢 kedk

4

2 回答 2

0

运算符只能取 2 个操作数,不能取 3 个(与在代码中使用时不同)

因此,您需要拆分查询,或嵌套第二个运算符:

"<Where><Or>" +
                "<And>" +
                   " <Eq>" +
                        "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                        "<Value Type=\"Text\">Tag</Value>" +
                     "</Eq>" +
                     "<IsNotNull>" +
                     "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                     "</IsNotNull>" +
                "</And>" +
                //Nest the second part of the Query by putting another <And> here
                "<And>" +
                  "<And>" +
                   " <Eq>" +
                        "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                        "<Value Type=\"Text\">Word</Value>" +
                     "</Eq>" +
                     "<IsNotNull>" +
                     "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                     "</IsNotNull>" +
                  "</And>" + 
                  "<And>" +
                   " <Eq>" +
                        "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                        "<Value Type=\"Text\">Word Test</Value>" +
                     "</Eq>" +
                     "<IsNotNull>" +
                     "<FieldRef Name=\"TagForDiscussion\"></FieldRef>" +
                     "</IsNotNull>" +
                  "</And>" +
                "</And>" +
                "</Or>" +
             "</Where>";
于 2010-06-29T17:32:28.833 回答
0

您尝试在 <Or> 元素中包含 3 个表达式,但它只允许两个表达式。

所以你必须改变:

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

<Or>
  <Or>
     <And>...</And>
     <And>...</And>
  </Or>
  <And>...</And>
</Or>
于 2010-06-29T17:35:17.267 回答