【问题标题】:Composite table storage query复合表存储查询
【发布时间】:2019-12-12 13:42:51
【问题描述】:

以下函数应返回两个日期之间包含特定 PartitionKey 和 TimeStamp 的项目列表

    public async Task<List<T>> RetrieveEntityDataAsync<T>(string deviceId = null) where T : TableEntity, new()
    {
        try
        {
            TableQuery<T> DataTableQuery = new TableQuery<T>();
            if (!string.IsNullOrEmpty(deviceId))
            {
                var filter =  TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, deviceId);
                var filter1 = TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.GreaterThanOrEqual, DateTime.Now.AddDays(-1).ToUniversalTime().ToString());
                var filter2 = TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.LessThanOrEqual, DateTime.Now.ToUniversalTime().ToString());
                var combined = TableQuery.CombineFilters(filter, TableOperators.And,filter1);
                var total = TableQuery.CombineFilters(combined, TableOperators.And, filter2);
                DataTableQuery = new TableQuery<T>().Where(total);
            }

            var l = new List<T>();
            TableContinuationToken continuationToken = null;
            do
            {
                var queryResponse = await table.ExecuteQuerySegmentedAsync(DataTableQuery, continuationToken);
                continuationToken = queryResponse.ContinuationToken;
                l.AddRange(queryResponse.Results);
            }
            while (continuationToken != null);
            return l;
        }
        catch (Exception ExceptionObj)
        {
            throw ExceptionObj;
        }
    }

发送它不起作用并通过返回“StorageException: Bad Request”进入异常。我究竟做错了什么? 谢谢

【问题讨论】:

    标签: c# azure-table-storage


    【解决方案1】:

    根据您提供的代码,您希望按日期时间过滤您的 Azure 表实体。我建议您使用TableQuery.GenerateFilterConditionForDate 来创建条件。 例如

     CloudStorageAccount account = CloudStorageAccount.Parse(connectionStr);
                var client =account.CreateCloudTableClient(new TableClientConfiguration());
                var table =client.GetTableReference("people");
                string date1 = TableQuery.GenerateFilterConditionForDate(
                       "Timestamp", QueryComparisons.GreaterThanOrEqual,
                       DateTime.Now.AddDays(-1).ToUniversalTime());
    
                string date2 = TableQuery.GenerateFilterConditionForDate(
                                   "Timestamp", QueryComparisons.LessThanOrEqual,
                                   DateTime.Now.ToUniversalTime());
                var key = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Jack");
                string filter = TableQuery.CombineFilters(date1, TableOperators.And, date2);
                filter = TableQuery.CombineFilters(filter, TableOperators.And, key);
                var query = new TableQuery<Person>().Where(filter);
                var l = new List<Person>();
                TableContinuationToken continuationToken = null;
                do
                {
                    var queryResponse = await table.ExecuteQuerySegmentedAsync(query, continuationToken);
                    continuationToken = queryResponse.ContinuationToken;
                    l.AddRange(queryResponse.Results);
                }
                while (continuationToken != null);
    
                foreach (var s in l) {
    
                    Console.WriteLine(s.PartitionKey + "" + s.);
                }
    

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多