【问题标题】:How to write combined query from azure table storage?如何从 azure 表存储中编写组合查询?
【发布时间】:2022-01-03 21:48:42
【问题描述】:

我正在尝试从表中查询,以便名称和分区键(组合)唯一。 我现在正在这样做:

public Spec(string name)
{
    Query = new TableQuery<TableEntity>()
        .Where(TableQuery.GenerateFilterCondition(nameof(table.Name), QueryComparisons.Equal, name));
}

但我还需要检查此名称是否存在分区键。所以需要查询表连同分区键和名称。 有人可以帮忙吗?如何将这些查询为组合查询。

【问题讨论】:

  • 表查询只关心表中实体属性(列)的内容。表的名称完全无关紧要。
  • 这在我看来不像是真正的代码 - 你不应该有一个名为 Table 的表类型。 table.Name 是什么?它来自哪里? (它不是您的方法的参数)。 public Spec(string name) 看起来像一个构造函数 - 但你不应该在构造函数中执行 IO 或太多繁重的工作(事实上,你不能在 ctor 中执行异步 IO)。
  • Spec 是我用来传递名称的方法。是的,Table 是实体类。我在这里使用表格只是为了展示。
  • public Spec(string name) 不是方法,而是构造函数。它缺少它的返回类型。你还没有回答我的问题,我问table.Name 来自哪里......

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


【解决方案1】:

请尝试以下方法:

public Spec(string name)
{
    var filterCondition1 = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "PartitionKeyValue");
    var filterCondition2 = TableQuery.GenerateFilterCondition(nameof(table.Name), QueryComparisons.Equal, name);
    Query = new TableQuery<TableEntity>()
        .Where(TableQuery.CombineFilters(filterCondition1, "AND", filterCondition2));
}

【讨论】:

  • 您好,谢谢您的建议。你知道我们是否可以从这个查询结果中检查是否有一个是唯一的。
  • 你这是什么意思?你能解释一下吗?
  • 好的,我这样做的原因是:我正在尝试验证唯一名称。因此,有多个名称存储在同一个分区键下。例如:PartitionKey:1, RowKey:1, Name: 'First Name' PartitionKey:1, RowKey: 2, Name:'First Name'
  • 如果我理解正确,您想知道Name = 'First Name' 在分区中是否唯一。对吗?
  • 是的,这就是我想要找到的。
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多