Как запросить LinqToTwitter с несколькими идентификаторами одновременно?
Я использую функцию linqtotwitter ниже, чтобы получить статусы по идентификатору, и она работает как ожидалось. Но мне было интересно, есть ли способ вызвать эту функцию только один раз (путем передачи коллекции идентификаторов в запрос, и функция вернет коллекцию). Потому что то, как я сейчас получаю статусы, просматривая коллекцию идентификаторов и вызывая GetTweetByKey
каждый раз.
C#:
public async Task<Status> GetTweetByKey(string key, StatusType statusType)
{
try
{
return await (
from tweet in _twitterContext.Status
where tweet.Type == statusType &&
tweet.ID == Convert.ToUInt64(key) &&
tweet.TweetMode == TweetMode.Extended &&
tweet.IncludeEntities == true
select tweet).FirstOrDefaultAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
1 ответ
Решение
Есть несколько способов сделать это, лучше всего использоватьjoin
,(Кажется, это ни к чему не приведет, поскольку, если какой-либо идентификатор не найден, создается исключение, поэтому твит не может быть возвращен).
Попробуйте обернуть ваш оригинальный код:
public async Task<List<Status>> GetTweetByKeys(string[] keys, StatusType statusType)
{
var tasks = keys.Select(key => GetTweetByKey(key, statusType)).ToArray();
var results = await Task.WhenAll(tasks);
return results.ToList();
}
public async Task<Status> GetTweetByKey(string key, StatusType statusType)
{
try
{
return await (
from tweet in _twitterContext.Status
where tweet.Type == statusType &&
tweet.ID == Convert.ToUInt64(key) &&
tweet.TweetMode == TweetMode.Extended &&
tweet.IncludeEntities == true
select tweet).FirstOrDefaultAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}