首页 > 解决方案 > 如何一次查询具有多个 id 的 LinqToTwitter?

问题描述

我正在使用下面的 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;
    }
}

标签: c#linqlinq-to-twitter

解决方案


有几种方法可以做到这一点,最好的可能是使用join. (这似乎一无所获,因为如果没有找到任何 ID,则会抛出异常,因此无法返回任何推文)。

尝试用以下方式包装您的原始代码:

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

推荐阅读