CAML查询返回错误的结果?

时间:2011-01-12 23:25:59

标签: sharepoint sharepoint-2007 caml

我有以下代码:

                    SPQuery oQuery = new SPQuery();
                    oQuery.Query = @"<Query>
                                           <Where>
                                              <And>
                                                 <Eq>
                                                    <FieldRef Name='PublishToSM' />
                                                    <Value Type='Boolean'>1</Value>
                                                 </Eq>
                                                 <IsNull>
                                                    <FieldRef Name='SMUpdateDate' />
                                                 </IsNull>
                                              </And>
                                           </Where>
                                        </Query>";
                    SPListItemCollection collListItems = list.GetItems(oQuery);

                    NevCoSocialMedia.NevCoFacebook fb = new NevCoSocialMedia.NevCoFacebook();

                    foreach (SPListItem oListItem in collListItems)
                    {
                        if (oListItem.Fields.ContainsField("PublishToSM") && Convert.ToBoolean(oListItem["PublishToSM"]) == true)
                        {
.
.
.

我的问题是为什么我需要最后if声明?如果我没有这个,它会抛出一个错误,说标识符在尝试oListItem["PublishToSM"]时不存在。这似乎是不可能的,因为我的CAML查询正在检查它是否具有适当的值......

4 个答案:

答案 0 :(得分:2)

删除     “query”元素

包裹您的caml

答案 1 :(得分:0)

尝试将值类型更改为整数

<Eq>
    <FieldRef Name='PublishToSM' />
    <Value Type='Integer'>1</Value>
</Eq>

http://www.sharepointblues.com/2010/02/22/caml-and-querying-boolean-fields/

答案 2 :(得分:0)

始终添加ViewFields,如果不这样做,只会在返回的列表项中填充ID和Title等基本字段。

答案 3 :(得分:0)

我之前在caml查询中使用布尔类型时遇到了一个奇怪的问题。在我们的7个环境中的6个中,布尔工作正常,但其中一个没有,它完全搞砸了我们的一个工作流程。我们永远无法弄清楚原因。

尝试“PublishToSM”字段的整数或位,看看是否得到不同的结果。