2

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 つあります。これは 1 つだけです。)

4

2 に答える 2

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()

于 2013-05-24T23:57:26.533 に答える
0

この問題を整理したのかもしれませんが、それは二重引用符内で二重引用符を使用しているという単純な理由によるものかもしれません。次の CAML クエリのように。

    "<Eq>" +
    "<FieldRef Name='Title' />" +
    "<Value type='Text'>" + tweet.tweetID.ToString() + "</Value>" +
    "</Eq>" +
    "</Where>"
于 2013-05-27T12:51:50.963 に答える