【问题标题】:How can I query from a list of partition keys in Azure table storage如何从 Azure 表存储中的分区键列表中查询
【发布时间】:2019-04-09 09:26:31
【问题描述】:

我有一个 Azure 表,其中分区键是登录网站的用户的配置文件 ID,所以如果我有一个用户 ID 列表,我需要获取表中是否存在具有该 ID 的分区键。我想返回找到的 id(分区键)列表。

我似乎在网上找不到任何好的信息,说我可以轻松做到这一点!

如果需要,我可以转移到 Sql Server 而不是 Azure 存储表

我想做这样的事情

 var query = new TableQuery<ConnectionEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey" , QueryComparisons.Equal, "1 or 3 or 4"));

 var queryResult = table.ExecuteQuery(query).ToList();

【问题讨论】:

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


    【解决方案1】:

    您想要组合多个过滤器。

    var filterOne = TableQuery.GenerateFilterCondition("PartitionKey" , QueryComparisons.Equal, "1");
    
    var filterTwo = TableQuery.GenerateFilterCondition("PartitionKey" , QueryComparisons.Equal, "2");
    
    var filterThree = TableQuery.GenerateFilterCondition("PartitionKey" , QueryComparisons.Equal, "3");
    
    var combinedFilters = TableQuery.CombineFilters(
                        TableQuery.CombineFilters(
                            filterOne,
                            TableOperators.Or,
                            filterTwo),
                        TableOperators.And, filter3);
    
    var query = new TableQuery<ConnectionEntity>()
        .Where(combinedFilters);
    

    或者,将CreateQuery&lt;T&gt;() 用于您的CloudTable 可能更容易,这样您就可以编写LINQ 查询:

    _cloudTable.CreateQuery<ConnectionEntity>()
        .AsQueryable()
        .Where(w => w.PartitionKey == "1" 
            || w.PartitionKey == "2" 
            || w.PartitionKey == "3");
    

    【讨论】:

    • 好的,第二个看起来不错,但如果我总是有 10 个分区键。这真的会减慢查询速度吗?仅供参考 - 我每次都会有一个不同的分区键列表。
    • 分区键是否连续?您可以使用字符串比较来获取范围。根据每个分区中的数据量,您可能需要查看不同的键
    • 不,分区键是我的配置文件 ID,例如。 13121、76753、93726
    • 我认为 AspNet Core 没有实现这种方法。
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2017-09-30
    • 2013-09-17
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多