问题描述
我正在尝试查询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",dateTime.Day)
);
我的问题是我如何才能在时间戳上创建查询请求,但只能使用年,月和日属性?
解决方法
您必须创建一列并为其创建索引。您的currdate datetime-column未建立索引,因此不应该建立索引,这就是查询时间较长的原因。
您可以创建不带时间信息的日期列,并在该列上建立索引,也可以指定自己的格式,例如。 20200928作为您日期的int列。