2

我有一个查询在使用任何 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 个其他查询可以正常工作……就是这个。)

4

2 回答 2

0

好吧,您可能解决了这个问题,但这可能是因为您在双引号中使用双引号的一个简单原因。就像下面的 CAML 查询一样。

    "<Eq>" +
    "<FieldRef Name='Title' />" +
    "<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
    "</Eq>" +
    "</Where>"
于 2013-05-27T12:51:50.963 回答
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)tweetIDor ((long)tweetID).ToString())。

于 2013-05-24T23:57:26.533 回答