Azure Table 查询删除不在指定列列表中的项目

Azure Table Query Delete Items Not In List for Specified Column

如果我有一个看起来像这样的 Azure Table:

PartitionKey | RowKey | Timestamp | InstanceId

我有 InstanceIds ab。我想删除 table 中不在列出的 InstanceId 中的任何项目(如 c)。 InstanceId 跨越 Partition 边界。我知道如何做 Batch Delete。但我不确定如何查询不是 ab.

的项目

如果您的 InstanceId 类型是字符串,

var query = new TableQuery<EntityType>()
    .Where(
         TableQuery.CombineFilters(
             TableQuery.GenerateFilterCondition("InstanceId", QueryComparisons.NotEqual, "a"), 
             TableOperators.And,
             TableQuery.GenerateFilterCondition("InstanceId", QueryComparisons.NotEqual, "b")
    ));

//Or you can build the filter string directly
var query = new TableQuery<EntityType>().Where("(InstanceId ne 'a') and (InstanceId ne 'b')");

如果是int,类似操作。

var query = new TableQuery<EntityType>()
    .Where(
        TableQuery.CombineFilters(
            TableQuery.GenerateFilterConditionForInt("InstanceId", QueryComparisons.NotEqual, a), 
            TableOperators.And, 
            TableQuery.GenerateFilterConditionForInt("InstanceId", QueryComparisons.NotEqual, b)
    ));

//Or build the filter string directly
var query = new TableQuery<EntityType>().Where("(InstanceId ne a) and (InstanceId ne b)");

然后使用ExecuteQuery得到你需要的查询结果。一个例子:

var entriesResult = table.ExecuteQuerySegmentedAsync(query, continuationToken).Result.Results;