如何一次查询具有多个ID的LinqToTwitter?

时间:2018-09-16 13:59:32

标签: c# linq linq-to-twitter

我正在使用下面的linqtotwitter函数通过ID获取状态,并且按预期方式工作。但是我想知道是否有一种方法只能调用一次此函数(通过将id的集合传递给查询,该函数将返回一个集合)。因为我目前正在通过遍历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 :(得分:1)

有几种方法可以做到,最好的方法是使用join (这似乎无济于事,因为如果找不到任何ID,就会出现异常引发,以便可以返回 no tweet)。

尝试使用以下代码包装原始代码:

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;
    }
}