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 元素中得出哪种类型。
我需要从 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 元素中得出哪种类型。