复合表存储查询

问题描述 投票:0回答:1

以下函数应返回在两个日期之间包含特定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个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.