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 列。
我正在尝试查询我的 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 列。