c# - CloudStorageAccount,发出 TableQuery 请求

标签 c# azure azure-sql-database azure-service-fabric

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

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)
                                                                        );

我的问题是如何在时间戳上创建查询请求但仅涉及年、月和日属性?

最佳答案

您必须创建一个列并在其上创建索引。您当前的日期时间列未建立索引,也不应该建立索引,这就是您的查询需要很长时间的原因。

您可以创建一个没有时间信息的日期列,并在该列上创建索引,或者您可以指定自己的格式,例如。 20200928 作为您的日期的 int 列。

关于c# - CloudStorageAccount,发出 TableQuery 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64100288/

相关文章:

c# - 如何使用自定义颜色为 MaskedTextBox 绘制边框?

c# - 如何在 C# 中为 SQL Azure 启用内部 Azure 服务

sql-server-2008 - 如何将数据从 SQL Server 插入到 SQL Azure?

c# - 正则表达式 - 提取外部范围匹配值 <table><table></table></table>

c# - 类型定义存在于两个库中

c# - ASP.NET - Android 设备的 C# 警报

.net - 如何获取Azure环境名称

azure - 如何将 DocumentDB 绑定(bind)用于 json 的队列触发器?

c# - 使用 C#(无 JavaScript)将 Blazor WebAssembly 文件直接分块到 Azure Blob 存储

Azure SQL 池弹性