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 条记录

入门者必看!SharePoint之CAML总结(实战)

JavaScript Sharepoint:限制caml查询中的结果

Sharepoint:限制caml查询中的结果

SharePoint服务器端对象模型 之 使用CAML进展数据查询

SharePoint服务器端对象模型 之 使用CAML进展数据查询