CloudStorageAccount,发出 TableQuery 请求

CloudStorageAccount, making TableQuery request

我正在尝试查询我的 CloudTable。我之前所做的是获取某些 table 的所有元素,但这需要很多时间。

public static List<CollectItem> GetCollectItems(string connectionString, string tableName, DateTime dateTime)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);

        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        // Create the CloudTable object that represents the "people" table.
        CloudTable table = tableClient.GetTableReference(tableName);

        TableContinuationToken token = null;
        List<CollectItem> entities = new List<CollectItem>();

        do
        {
            var queryResult = table.ExecuteQuerySegmented(new TableQuery<CollectItem>(), token);
            entities.AddRange(queryResult.Results);
            token = queryResult.ContinuationToken;
        } while (token != null);

        entities = entities.Where(x => x.Timestamp.DateTime.Year == dateTime.Year &&
                                       x.Timestamp.DateTime.Month == dateTime.Month &&
                                       x.Timestamp.DateTime.Day == dateTime.Day).ToList();

        return entities;
    }

然后我尝试创建一些查询条件

do
        {
            TableQuery<CollectItem> itemStockQuery = new TableQuery<CollectItem>().Where(
                                                                        TableQuery.GenerateFilterConditionForInt("Timestamp", QueryComparisons.Equal, dateTime)
                                                                        );

            var queryResult = table.ExecuteQuerySegmented(itemStockQuery, token);
            entities.AddRange(queryResult.Results);
            token = queryResult.ContinuationToken;
        } while (token != null);

但现在它所做的是主持人年、月、日、小时、分钟....而我只需要主持人年、月和日。 然后我尝试创建这个,但它说这是一个错误的请求。

TableQuery<CollectItem> itemStockQuery = new TableQuery<CollectItem>().Where(
                                                                        TableQuery.GenerateFilterConditionForInt("Timestamp.DateTime.Day", QueryComparisons.Equal, dateTime.Day)
                                                                        );

我的问题是如何在 Timestamp 上创建查询请求但仅符合年、月和日 属性?

您必须创建一个列并在其上创建索引。您的当前 datetime-column 没有编入索引,也不应该编入索引,这就是您的查询需要很长时间的原因。

您可以创建不带 time-informationen 的 date-column 并在该列上创建索引,或者您可以指定自己的格式,例如。 20200928 作为您日期的 int 列。