簡體   English   中英

復合表存儲查詢

[英]Composite table storage query

以下函數應返回兩個日期之間包含特定 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”進入異常。 我究竟做錯了什么? 謝謝

根據您提供的代碼,您希望按日期時間篩選 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.);
            }

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM