首页 > 解决方案 > 针对 Azure 表存储创建 LINQ 查询时出错

问题描述

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

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

microsoft.azure.cosmos.table\1.0.8\

反过来使用

Microsoft.Azure.DocumentDB.Core\2.11.2

表上的许多操作都可以正常工作,但我在创建 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 ,反正这是类

  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 一起使用

非常感谢

标签: linq.net-coreazure-table-storage

解决方案


我能够重现这个问题。问题来了,因为Provider属性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");

你不应该得到错误。


推荐阅读