You need to enable JavaScript to run this app. .NET Core 3.1操作Azure Table Storage创建LINQ查询报空引用异常
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:45:06