2011-01-12 163 views
0

我有以下代码: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查询检查有一个适当的值...

回答

2

删除 “查询”元素

环绕你的凸轮

0

总是添加ViewFields,如果你不这样做,只有基本领域像ID和Title这样的ds会被填入返回的listitems中。

0

我以前也遇到过在使用布尔类型在caml查询中出现的奇怪问题。在我们的7个环境中,有6个布尔运行正常,但其中一个没有,它完全搞砸了我们的工作流程之一。我们无法弄清楚为什么。

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