【问题标题】:How to delete Azure table entities based on range query results如何根据范围查询结果删除 Azure 表实体
【发布时间】:2019-01-20 06:44:25
【问题描述】:

我正在尝试根据我的范围过滤器删除 Azure 表实体。我在这里尝试的只是删除旧记录。

我能够根据我的范围搜索条件获得正确的实体。

TableQuery<Tables> rangeQuery = new TableQuery<Tables>().Where(
    TableQuery.CombineFilters(
    TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "DeleteTablename"),
    TableOperators.And,
    TableQuery.GenerateFilterConditionForDate("StartedOn", QueryComparisons.LessThan, DateTime.Now.Add(new TimeSpan(0, -60, 0)))));

    foreach(Tables rows in logTable.ExecuteQuery(rangeQuery)) {
        log.Info($"{rows.PartitionKey}, {rows.RowKey}\t{rows.FinishedOn}\t{rows.Timestamp}");
    }
    //till here it works
    TableResult retrievedResult = logTable.ExecuteQuery(rangeQuery);
    Tables deleteEntity = (Tables)retrievedResult.Result;

出现以下错误

不能隐式转换类型 'System.Collections.Generic.IEnumerable' 到 'Microsoft.WindowsAzure.Storage.Table.TableResult' 计时器测试

无法转换类型“Microsoft.WindowsAzure.Storage.Table.TableResult” 到'timertest.Tables' timertest

注意事项:

  • timertest 是我的namespace
  • Tables 是一个类,它扩展了 TableEntity 类以添加我的 azure 表中的自定义属性。

根据范围删除实体的任何想法?

【问题讨论】:

    标签: c# azure azure-functions azure-table-storage azure-tablequery


    【解决方案1】:

    有什么想法可以根据范围删除实体吗?

    在 Azure Tables 中执行批量删除,您需要使用 Entity Group Transaction 并添加要批量删除的实体,然后执行该批量操作。对于要批量操作(创建、更新或删除)的实体:

    • 它们应该具有相同的PartitionKey 值。
    • 一个批次中最多可以包含 100 个实体。
    • 批处理的最大负载大小可以是 4MB。

    请注意,即使一个实体在组事务中失败,整个事务也会回滚。

    您可以在此处了解有关实体批量交易的更多信息:https://docs.microsoft.com/en-us/rest/api/storageservices/performing-entity-group-transactions

    【讨论】:

    • 谢谢。将检查并回复您。
    • 无法理解如何在我的代码中使用Entity Group Transaction。对不起,我对 c# 和 azure 很陌生,你介意写一个小例子吗?
    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多