如何根据范围查询结果删除Azure表实体

时间:2018-08-13 13:50:18

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

我正在尝试根据我的范围过滤器删除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'timertest

     

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

注意:

  • timertest是我的namespace
  • Tables是一个类,它扩展了TableEntity类以添加我的 天蓝色表中的自定义比例。

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

1 个答案:

答案 0 :(得分:1)

  

有任何想法要根据范围删除实体吗?

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

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

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

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