Как запросить LinqToTwitter с несколькими идентификаторами одновременно? - PullRequest
0 голосов
/ 16 сентября 2018

Я использую функцию linqtotwitter ниже, чтобы получить статусы по ID, и она работает как положено.Но мне было интересно, есть ли способ вызвать эту функцию только один раз (путем передачи коллекции идентификаторов в запрос, и функция вернет коллекцию).Потому что так, как я сейчас получаю статусы, перебирая коллекцию идентификаторов и каждый раз вызывая 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 Ответ

0 голосов
/ 02 октября 2018

Есть несколько способов сделать это, лучше всего было бы использовать 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;
    }
}
...