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个其他查询工作很好…

SharePoint CAML查询工作在生成器,但不是在代码

作为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>"