SharePoint CAML查询工作在生成器,但不是在代码
本文关键字:代码 CAML 查询 工作 SharePoint | 更新日期: 2023-09-27 18:15:10
我有一个在使用任何CAML查询生成器时工作的查询,当在c#中使用它用于SharePoint web部件时,它总是返回没有结果。
using (SPWeb ThisWeb = ThisSite.OpenWeb())
{
IList<Tweet> Tweets = GetTweets(item["Mode"].ToString(), item["String"].ToString(), LastTweet, ThisSite);
SPList ThisList = ThisWeb.Lists.TryGetList(Variables.TwitterTweetList);
foreach (var tweet in Tweets)
{
SPListItemCollection itms = ThisList.GetItems(new SPQuery() { Query = @"<Where>" +
"<Eq>" +
"<FieldRef Name=""Title"" />" +
"<Value type=""Text"">" + tweet.tweetID.ToString() + "</Value>" +
"</Eq>" +
"</Where>"
});
if (itms.Count == 0)
{
// add the tweet to 'ThisList'
}
}
}
进入代码,您将看到tweet.tweetID.ToString()为"337958304577892353"
当运行这段代码时,它返回0项。
当在U2U生成器或任何其他CAML查询中运行查询时,它返回1(如果代码运行不止一次,则返回2、3、4等)。
查询在U2U builder中运行:
<Query>
<Where>
<Eq>
<FieldRef Name="Title" />
<Value type="Text">"337958304577892353"</Value>
</Eq>
</Where>
</Query>
(是的,当在SharePoint中做CAML时,你放下标签…我有3个其他查询工作很好…
作为robert所说的推论,您是否尝试过将tweet.tweetID.ToString()声明为自己的变量?如果没有其他问题,您可以在调试中查看它,并确认它正在向SPList对象传递正确的信息。
foreach(var tweet in Tweets)
{
string tweetID = tweet.tweetID.ToString();
SPQuery query = new Query();
query.Query = string.format(queryformat, tweetID);
SPListItemCollection tweetItems = list.GetItems(query);
}
…等等......我的经验是,SharePoint会很高兴地处理碰巧是一长排数字的字符串。然而,有可能tweetID.ToString()
没有返回您认为的结果,因此需要进行强制转换((string)tweetID
或((long)tweetID).ToString()
)。
好吧,也许你已经解决了这个问题,但这可能是因为一个简单的原因,你在双引号中使用双引号。就像下面的CAML查询一样。
"<Eq>" +
"<FieldRef Name='Title' />" +
"<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
"</Eq>" +
"</Where>"