按rowkey的Azure表存储查询,前导零

时间:2018-01-16 02:41:15

标签: linq azure storage azure-storage

我在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”的字符串很重要?

是否还有其他人遇到此问题,若然,这是一个错误吗?

1 个答案:

答案 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();

测试结果:

enter image description here