代码之家  ›  专栏  ›  技术社区  ›  Dev

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

  •  1
  • Dev  · 技术社区  · 8 年前

    我正在使用下面的linqtotwitter函数来按ID获取状态,它按预期工作。但是我想知道是否有一种方法只能调用这个函数一次(通过将id的集合传递给查询,函数将返回一个集合)。因为我现在通过循环收集Id和call来获取状态 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 回复  |  直到 8 年前
        1
  •  1
  •   OfirD    7 年前

    有几种方法可以做到这一点,最好的方法可能是使用 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;
        }
    }
    
    推荐文章