如何从 azure 表存储中编写组合查询?

Posted

技术标签:

【中文标题】如何从 azure 表存储中编写组合查询?【英文标题】:How to write combined query from azure table storage? 【发布时间】: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 来自哪里...... 【参考方案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' 在分区中是否唯一。对吗? 是的,这就是我想要找到的。

以上是关于如何从 azure 表存储中编写组合查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript 在 couchdb 中使用多个组合键进行查询,而无需为每个组合编写单独的视图?

如何从 Azure 表存储中查询最近的 n 条记录?

MySQL - 当一个表可能没有对应的行时,如何在查询中组合 2 个表

如何在 C# 中存储 SQL 查询的结果字符串

添加到基于表/查询的 Access 组合框

第十七章 组合查询