SharePoint CAML 查询在生成器中有效,但在代码中无效
Posted
技术标签:
【中文标题】SharePoint CAML 查询在生成器中有效,但在代码中无效【英文标题】:SharePoint CAML query works in builder but not in code 【发布时间】:2013-05-20 13:53:42 【问题描述】:我有一个查询在使用任何 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”
运行此代码时,它返回零项。
在 U2U builder 或任何其他 CAML 查询中运行查询时,它会返回 1(如果代码运行不止一次,则返回 2、3、4 等)。
查询在 U2U builder 中运行:
<Query>
<Where>
<Eq>
<FieldRef Name="Title" />
<Value type="Text">"337958304577892353"</Value>
</Eq>
</Where>
</Query>
(是的,在 SharePoint 中执行 CAML 时,您删除了标签……我还有 3 个其他查询都可以正常工作……就是这个。)
【问题讨论】:
我在您的代码和 U2U 查询之间看到的唯一区别是您在 U2U 查询中的引号内包含推文 ID。没关系,但可能值得一试。 【参考方案1】:作为 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()
)。
【讨论】:
它确实传递了正确的值【参考方案2】:也许你解决了这个问题,但这可能是因为你在双引号中使用双引号的一个简单原因。就像下面的 CAML 查询一样。
"<Eq>" +
"<FieldRef Name='Title' />" +
"<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
"</Eq>" +
"</Where>"
【讨论】:
当你使用前面有@的字符串时,你需要用两个双引号来..@"这是如何在这个字符串中添加你""quotes""以上是关于SharePoint CAML 查询在生成器中有效,但在代码中无效的主要内容,如果未能解决你的问题,请参考以下文章
SharePoint:如何使用列表中的 CAML 查询获取前 5 条记录
JavaScript Sharepoint:限制caml查询中的结果