繁体   English   中英

SharePoint CAML查询可在构建器中使用,而不能在代码中使用

[英]SharePoint CAML query works in builder but not in code

我有一个在使用任何CAML查询生成器时都有效的查询,在SharePoint Web部件的c#中使用它时,它始终不返回任何结果。

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构建器或任何其他CAML查询中运行查询时,它返回1(如果代码多次运行则返回2、3、4,等等)。

在U2U构建器中运行查询:

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

(是的,当在SharePoint中进行CAML时,您删除了这些标记……我还有其他3个可以正常工作的查询。就是这样。)

作为罗伯特所说的推论,您是否尝试过将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()可能不会返回您认为的样子,因此,必须使用tweetID.ToString() (string)tweetID((long)tweetID).ToString() )。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM