JSONB 列中的 EF Core Projecting 可选 属性

EF Core Projecting optional property in jsonb column

我需要从 jsonb 列投影一些字段,其中很少有可选字段

我正在使用 EF Core 3.1 和 npgsl,到目前为止我得到了这个

 var shipments = _dbContext.Shipments.Select(x => new
            {
                ShipmentNo= x.ShipmentNumber,
                ReportNum = x.ShipmentData.RootElement.GetProperty("reportNumber"),
                ShipmentValue= x.ShipmentData.RootElement.GetProperty("shipmentMetadata").GetProperty("value").GetString(),
            }

但是 value 是可选的,这是抛出异常。我看到了 .TryGetProperty(...) 方法,但它需要输出变量,而且我认为它在服务器端进行评估。我想知道是否有办法处理这个问题,以便查询完全在 Postgres 中运行。

您忘记为 reportNumber 添加 GetInt32(或任何类型),就像在 shipmentMetadata 之后添加 GetString 一样。为了将其翻译成 SQL,您需要告诉提供商您希望从 JSON 元素中得出哪种类型。