如何一次查询具有多个 ID 的 LinqToTwitter?
How to query LinqToTwitter with multiple id's at once?
我正在使用下面的 linqtotwitter 函数通过 ID 获取状态,它按预期工作。但是我想知道是否有办法只调用这个函数一次(通过将 id 的集合传递给查询,函数将 return 一个集合)。因为我目前通过循环访问 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;
}
}
有几种方法,最好的可能是使用join
。 (这似乎无处可去,因为如果有的话没有找到ID,抛出异常,这样可以返回no推文。
尝试用以下方式包装您的原始代码:
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;
}
}
我正在使用下面的 linqtotwitter 函数通过 ID 获取状态,它按预期工作。但是我想知道是否有办法只调用这个函数一次(通过将 id 的集合传递给查询,函数将 return 一个集合)。因为我目前通过循环访问 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;
}
}
有几种方法,最好的可能是使用 (这似乎无处可去,因为如果有的话没有找到ID,抛出异常,这样可以返回no推文。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;
}
}