[英]SharePoint CAML query works in builder but not in code
我有一个在使用任何CAML查询生成器时都有效的查询,在SharePoint Web部件的c#中使用它时,它始终不返回任何结果。
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”
运行此代码时,它返回零项目。
在U2U构建器或任何其他CAML查询中运行查询时,它返回1(如果代码多次运行则返回2、3、4,等等)。
在U2U构建器中运行查询:
<Query>
<Where>
<Eq>
<FieldRef Name="Title" />
<Value type="Text">"337958304577892353"</Value>
</Eq>
</Where>
</Query>
(是的,当在SharePoint中进行CAML时,您删除了这些标记……我还有其他3个可以正常工作的查询。就是这样。)
作为罗伯特所说的推论,您是否尝试过将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()
可能不会返回您认为的样子,因此,必须使用tweetID.ToString()
(string)tweetID
或((long)tweetID).ToString()
)。
好吧,也许您已经解决了这个问题,但是那可能是由于您在双引号中使用双引号的简单原因。 就像下面的CAML查询一样。
"<Eq>" +
"<FieldRef Name='Title' />" +
"<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
"</Eq>" +
"</Where>"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.