linq - 针对 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 一起使用
非常感谢
解决方案
我能够重现这个问题。问题来了,因为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");
你不应该得到错误。
推荐阅读
- r - 如何从数据框中提取 csv 列并将其与现有数据框结合
- html - 具有固定大小的第一列和相同大小的其余列的 Html 表
- ansible - 如何为每个剧本指定 ansible .retry 文件位置
- c++ - 在具有多个索引范围的 Rcpp 中对 NumericVector 进行子集
- r - R整齐的行意味着来自列的子集
- regex - Presto - 用于从 url 中提取 ID 的正则表达式
- php - 如何通过文件夹名称或文件夹 ID 获取 Google 驱动器文件?
- javascript - 由 translateX 更改的全屏部分
- php - 2019 年使用 PHP 保护密码的最佳方法
- shopify - Shopify 员工帐户只读权限