SharePoint CAML查询在构建器中有效,但在代码中无效

时间:2013-05-24 21:23:23

标签: c# visual-studio-2010 sharepoint web-parts caml

我在使用任何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”

运行此代码时,它会返回ZERO项目。

在U2U构建器或任何其他CAML查询中运行查询时,如果代码运行多次,则返回1(2,3,4等)。

在U2U构建器中运行查询:

<Query>
    <Where>
        <Eq>
            <FieldRef Name="Title" />
            <Value type="Text">"337958304577892353"</Value>
        </Eq>
    </Where>
</Query>

(是的,在SharePoint中进行CAML时,你删除了标签......我还有其他3个查询工作得很好......就是这个。)

2 个答案:

答案 0 :(得分: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)tweetID((long)tweetID).ToString())。

答案 1 :(得分:0)

好吧,你可能已经解决了这个问题但可能是因为一个简单的原因,你在双引号中使用双引号。比如下面的CAML查询。

    "<Eq>" +
    "<FieldRef Name='Title' />" +
    "<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
    "</Eq>" +
    "</Where>"