Azure Table 查询删除不在指定列列表中的项目
Azure Table Query Delete Items Not In List for Specified Column
如果我有一个看起来像这样的 Azure Table
:
PartitionKey | RowKey | Timestamp | InstanceId
我有 InstanceId
s a
和 b
。我想删除 table 中不在列出的 InstanceId
中的任何项目(如 c
)。 InstanceId
跨越 Partition
边界。我知道如何做 Batch
Delete
。但我不确定如何查询不是 a
或 b
.
的项目
如果您的 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;
如果我有一个看起来像这样的 Azure Table
:
PartitionKey | RowKey | Timestamp | InstanceId
我有 InstanceId
s a
和 b
。我想删除 table 中不在列出的 InstanceId
中的任何项目(如 c
)。 InstanceId
跨越 Partition
边界。我知道如何做 Batch
Delete
。但我不确定如何查询不是 a
或 b
.
如果您的 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;