c# - 需要使用 ExecuteQuerySegmentedAsync 进行 Azure 表查询的示例

标签 c# azure azure-table-storage

我只是想获取 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 的信息。希望这对其他人有用。这里还有更多需要注意的事情:

  1. 该表有数千个实体,而我总共只需要大约 500 个实体。虽然下面的代码可以工作,但可能需要对 .Take(int) 的使用进行一些工作。据我了解,“Take”方法仅限制每个查询返回的记录数。由于我可能需要处理一个延续 token ,因此将其设置为 5 之类的值只会使每个请求只需要 5 个实体,直到列表末尾。

  2. 我添加了一个索引计数器,以防我们获得超过 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/

相关文章:

c# - 如何为 Azure 存储表集表服务属性端点构建规范资源?

c# - Azure TableEntity EntityResolver 用于调用和重用基本解析功能

c# - 编程竞赛题目: Counting Polyominos

c# - Lambda 表达式如何对 List<String> 执行 String.Format?

c# - 作用域如何影响 "do...while"循环,反之亦然?

c# - 单核机器上的 Web API 和 Async/Await 优势

azure - 为 Azure API 管理配置动态 header 值

带有 NAV Dynamics Web 服务的 C# 插入枚举类型对象

azure - 使用 javamail 和 OAUTH2 从独立应用程序访问 Outlook.office365.com

azure - 在Azure表存储服务中查询PartitionKey和RowKey语法