0

我们有一个存储表,我们想在其中添加一个新的整数列(它实际上是一个转换为 int 的 3 个值的枚举)。我们希望在以下情况下需要一行:

  1. 这是一个较旧的行,该列不存在
  2. 这是一个新行,该列存在并且与特定值不匹配

当我只在列上使用不等于运算符时,不会返回旧行。如何处理?

更新

假设比较总是为不存在的列返回 false,我在下面尝试了类似的操作(属性的值在存在时将始终 > 0),这也不起作用:

如果 ( Prop GreaterThanOrEqual -1) 条件返回false,我假设该值为空。

如果不是,则进行实际比较。

string propNullCondition = TableQuery.GenerateFilterConditionForInt(
                    "Prop",
                    QueryComparisons.GreaterThanOrEqual,
                    -1);

propNullCondition = $"{TableOperators.Not}({propNullCondition})";

string propNotEqualValueCondition = TableQuery.CombineFilters(
            propNullCondition,
            TableOperators.Or,
            TableQuery.GenerateFilterConditionForInt(
                "Prop",
                QueryComparisons.NotEqual,
                XXXX));

注意:到目前为止写的表格行没有“Prop”,只有新行会有这个列。并且期望只有当 Prop != XXXX 时查询才应该返回所有旧行和新行。

4

1 回答 1

0

看来您的代码是正确的,也许那里有一个小错误。您可以按照下面的代码进行操作,根据我的测试可以正常工作:

注意:在过滤器中,列名区分大小写。

        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
        CloudTable table = tableClient.GetTableReference("test1");

        string propNullCondition = TableQuery.GenerateFilterConditionForInt(
                "prop1", //note the column name shoud be case-sensitive here.
                QueryComparisons.GreaterThanOrEqual,
                -1);

        propNullCondition = $"{TableOperators.Not}({propNullCondition})";

        TableQuery<DynamicTableEntity> propNotEqualValueCondition = new TableQuery<DynamicTableEntity>()
            .Where(
             TableQuery.CombineFilters(
                propNullCondition,
                TableOperators.Or,
                TableQuery.GenerateFilterConditionForInt(
                "prop1",//note the column name shoud be case-sensitive here.
                QueryComparisons.NotEqual,
                2)));
            
    
        var query = table.ExecuteQuery(propNotEqualValueCondition);

        foreach (var q in query)
        {
            Console.WriteLine(q.PartitionKey);
        }

测试结果:

在此处输入图像描述

这是我的天蓝色表:

在此处输入图像描述

于 2020-07-27T04:49:49.220 回答