我只是想获取 Azure 表中与某个字段名称匹配的所有实体,但似乎找不到任何我可以学习的最新示例。
最终我想将 HTML 表格中的结果显示回我的 View ,所以我想 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但示例引用了不再可用的方法和操作。
最佳答案
这对我有用。我无法找到任何显示最近使用 Azure Tables SDK 的信息。希望这对其他人有用。这里还有更多需要注意的事情:
该表有数千个实体,而我总共只需要大约 500 个实体。虽然下面的代码可以工作,但可能需要对
.Take(int)
的使用进行一些工作。据我了解,“Take”方法仅限制每个查询返回的记录数。由于我可能需要处理一个延续 token ,因此将其设置为 5 之类的值只会使每个请求只需要 5 个实体,直到列表末尾。我添加了一个索引计数器,以防我们获得超过 500 条记录,但我的测试显示有 2000 多条记录,而没有它则为 5000 多条记录,所以这可能是调用异步性质的结果?
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; }
关于c# - 需要使用 ExecuteQuerySegmentedAsync 进行 Azure 表查询的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712952/