我有以下代码:
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查询正在检查它是否具有适当的值......
答案 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”字段的整数或位,看看是否得到不同的结果。