我在Azure中有一个存储表,其中包含以下主键和行键(实际上不是一个示例),并将整个表作为TableEntities列表检索:
“partitionkey”,“00”
“partitionkey”,“01”
“partitionkey”,“10”
“partitionkey”,“11”
“partitionkey”,“20”
“partitionkey”,“21”
当我像这样查询列表时:
var myItem =
(from item in list
where item.RowKey == "00"
select item).FirstOrDefault();
myItem返回null。如果我查询RowKey ==“01”,也是如此。
但是当我单独使用RowKey查询任何没有前导“0”的字符串时,我得到了预期的结果。此外,如果我使用任何PartitionKey进行查询,并且RowKey具有前导“0”:
var myItem =
(from item in list
where item.PartitionKey == "partitionkey" && item.RowKey == "00"
select item).FirstOrDefault();
我也会得到预期的结果。
如果Azure表存储中的RowKeys是字符串,为什么带有前导“0”的字符串很重要?
是否还有其他人遇到此问题,若然,这是一个错误吗?
答案 0 :(得分:0)
是否还有其他人遇到此问题,若然,这是一个错误吗?
根据你的描述,似乎列表中没有合适的实体
myItem
返回null。您可以尝试输出列表中的实体
foreach (var item in list)
{
Console.WriteLine("{0}, {1}", item.PartitionKey, item.RowKey,);
}
我使用以下代码进行测试,它在我身边正常工作。我无法重现您提到的问题
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("storage connectionstring");
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Create the CloudTable object that represents the "test" table.
CloudTable table = tableClient.GetTableReference("test");
TableQuery<TableEntity> query = new TableQuery<TableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey",QueryComparisons.Equal, "partitionkey"));
var list = table.ExecuteQuery(query);
var myItem = (from item in list
where item.RowKey == "00"
select item).FirstOrDefault();
测试结果: