我只是试图在Azure表中获取与某个字段名称匹配的所有实体,而且似乎找不到我可以学习的任何最新示例。
最终我想将结果显示在HTML表中以返回视图,所以我认为List<ActivityModel>
会很有意义。要么是IEnumerable
,因为我不需要更改任何实体(只需读取)。无论哪种方式,我都在努力应对基本概念。
public async Task<List<ActivityModel>> GetActivitiesAsync(string domainName)
{
CloudTable cloudTable = TableConnection("NodeEvents");
TableQuery<ActivityModel> query = new TableQuery<ActivityModel>().Where(
TableQuery.GenerateFilterCondition("DomainName", QueryComparisons.Equal, domainName)
);
//tried many examples of continuation tokens/etc
}
我遇到的问题是,所有最新的SDK都使用ContinuationToken进行异步调用,而我似乎找不到任何好的示例。这似乎应该是一个简单的任务。任何帮助表示赞赏。
试图遵循here,但是示例引用了不再可用的方法和操作。
答案 0 :(得分:0)
这对我有用。我什么都找不到,表明最近使用过Azure Tables SDK。希望这对其他人有用。这里还有更多注意事项:
该表有数千个实体,我总共只想要约500个。尽管下面的代码可以正常工作,但是在使用.Take(int)
时还需要一些工作。据我了解,“ Take”方法只会限制每个查询返回多少记录。由于我可能要处理一个连续令牌,因此将其设置为5左右,则每个请求只需要5个实体,直到列表结尾。
我添加了一个索引计数器,以防万一我们获得了500条以上的记录,但是我的测试显示2000条以上的记录,而5000条以上的记录却没有,所以这可能是调用异步的结果吗? / p>
public async Task<List<ActivityModel>> GetActivitiesAsync(string domainName)
{
List<ActivityModel> activities = new List<ActivityModel>();
CloudTable cloudTable = TableConnection("NodeEvents");
string filter = TableQuery.GenerateFilterCondition("DomainName", QueryComparisons.Equal, domainName);
TableContinuationToken continuationToken = null;
do
{
var result = await cloudTable.ExecuteQuerySegmentedAsync(new TableQuery<ActivityModel>().Where(filter), continuationToken);
continuationToken = result.ContinuationToken;
int index = 0;
if (result.Results != null)
{
foreach (ActivityModel entity in result.Results)
{
activities.Add(entity);
index++;
if (index == 500)
break;
}
}
} while (continuationToken != null);
return activities;
}