2013-05-24 3 views
2

У меня есть запрос, который работает при использовании любого построителя запросов CAML, когда он используется в C# для веб-части SharePoint, он всегда не возвращает никаких результатов.Запрос SharePoint CAML работает в построителе, но не в коде

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> 

(Да, при выполнении CAML в SharePoint, вы уронили теги ... У меня есть 3 другие вопросы, которые работают очень хорошо .. это только этот один.)

+0

Единственное различие, которое я вижу между вашим кодом и запросом U2U, заключается в том, что у вас есть идентификатор твита внутри кавычек в запросе U2U. Это не имеет значения, но, возможно, стоит попробовать. – Robbert

ответ

0

Как следствие того, что сказал Робберт, вы пробовали объявить 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() не возвращает то, что вы думаете, и, как следствие, такой литой (или ((long)tweetID).ToString()).

+0

Да, я пробовал это с тем же результатом. :( – RyanFromIT

+0

Это действительно правильное значение – RyanFromIT

+0

Вы пытались заменить Eq на Contains? – NotVonKaiser

0

Возможно, вам удалось разобраться с этой проблемой, но, возможно, это связано с простой причиной того, что вы используете двойную цитату в двойной кавычке. как в следующем запросе CAML.

+0

Когда вы используете строку с @ впереди, вам нужно использовать две двойные кавычки для пользователя. @ «вот как вы добавляете», "цитирует" в этой строке " – RyanFromIT

Смежные вопросы