针对 Azure Table 存储创建 LINQ 查询时出错

Error creating LINQ query against Azure Table Storage

我正在从 .NET CORE 3.1 控制台应用程序访问 table 存储

我正在使用最新的(此时)PM

microsoft.azure.cosmos.table.0.8\

反过来使用

Microsoft.Azure.DocumentDB.Core.11.2

table 上的许多操作工作正常,但我在创建 LINQ 查询时遇到错误

这是生成错误的行,空引用异常

     var myquery = new TableQuery<DocEntity>()
        .Where(r => r.PartitionKey == "doc_manager_test_client");

这是解决问题并允许我执行查询的解决方法

但我不喜欢这种语法,丑陋而冗长,使长查询变得不可读

     var myquery = new TableQuery<DocEntity>()
        .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "doc_manager_test_client"));

我不认为问题出在 DocEntity ,反正这是 class

  public class DocEntity : TableEntity {
     public DocEntity() {
     }

     public DocEntity(string doc_manager_id, string doc_id) {
        PartitionKey = doc_manager_id;
        RowKey = doc_id;
     }

     public string DocName { get; set; }
     public string DocCategory { get; set; }
     public Int64 DocSize { get; set; }
  }

谁能帮我解决这个问题?

官方文档很差,我没有找到任何完整的示例来展示如何进行 LINQ 查询,只有像我上面的代码片段在我的应用程序中不起作用。也许是版本控制问题,他们使用以前版本的 .NET,但我希望它能与 core 3.1

一起使用

非常感谢

我能够重现这个问题。问题来了,因为 Provider 属性 of TableQuery 是空的(不知道为什么)。

您可以使用以下解决方法:

        StorageCredentials credentials = new StorageCredentials("<account-name>", "<account-key>");
        CloudTable table = new CloudTable(new Uri("https://<account-name>.table.core.windows.net/<table-name>"),
            credentials);
        var tableQuery = table.CreateQuery<DocEntity>().Where(r => r.PartitionKey == "somevalue");

你应该不会收到错误。