我在使用任何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”
运行此代码时,它会返回ZERO项目。
在U2U构建器或任何其他CAML查询中运行查询时,如果代码运行多次,则返回1(2,3,4等)。
在U2U构建器中运行查询:
<Query>
<Where>
<Eq>
<FieldRef Name="Title" />
<Value type="Text">"337958304577892353"</Value>
</Eq>
</Where>
</Query>
(是的,在SharePoint中进行CAML时,你删除了标签......我还有其他3个查询工作得很好......就是这个。)
答案 0 :(得分:0)
作为Robbert所说的必然结果,您是否尝试将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()
)。
答案 1 :(得分:0)
好吧,你可能已经解决了这个问题但可能是因为一个简单的原因,你在双引号中使用双引号。比如下面的CAML查询。
"<Eq>" +
"<FieldRef Name='Title' />" +
"<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
"</Eq>" +
"</Where>"