.NET Core 3.1操作Azure Table Storage创建LINQ查询报空引用异常
.NET Core 3.1 下Azure Table Storage LINQ查询空引用异常解决方案
根因说明
你使用的Microsoft.Azure.Cosmos.Table 1.0.8版本中,直接对new TableQuery<T>()返回的实例调用LINQ Where扩展方法会触发空引用异常,原因是该实例不支持原生LINQ表达式解析,只有字符串过滤的重载可以正常运行,也就是你当前使用的临时方案的生效逻辑。
你的DocEntity类定义完全符合要求,无需调整。
正确解决方案
通过CloudTable实例的CreateQuery<T>()方法获取支持LINQ解析的可查询对象,直接编写标准LINQ表达式即可,完全兼容.NET Core 3.1环境,无需更换NuGet包版本。
示例代码如下:
// 初始化CloudTable实例(你现有可正常执行其他表操作的初始化逻辑可直接复用) CloudTableClient tableClient = new CloudTableClient( new Uri("你的Table Storage服务端点"), new StorageCredentials("存储账户名", "存储账户密钥") ); CloudTable docTable = tableClient.GetTableReference("你的表名"); // 编写LINQ查询,语法和普通LINQ完全一致,可读性高 var linqQuery = docTable.CreateQuery<DocEntity>() .Where(r => r.PartitionKey == "doc_manager_test_client"); // 执行查询获取结果 var queryResult = linqQuery.ToList();
如果需要多条件过滤,直接按标准LINQ语法拼接即可:
var multiConditionQuery = docTable.CreateQuery<DocEntity>() .Where(r => r.PartitionKey == "doc_manager_test_client" && r.DocCategory == "合同" && r.DocSize > 102400);
内容的提问来源于stack exchange,提问作者Anton M
相关产品推荐
相关产品推荐

