2010-06-29 54 views
0

当我使用CAML过滤我的ListView,就OK了,当我用这个CAML:当我使用CAML过滤的ListView <! - 失败#RENDER - >是显示在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>" + 
        "</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

回答

0

您尝试有<或者>元素中3倍的表达,但只允许正好有两个。

所以,你必须改变:

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

<Or> 
    <Or> 
    <And>...</And> 
    <And>...</And> 
    </Or> 
    <And>...</And> 
</Or> 
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>"; 
相关问题