Ядро EF, проецирующее необязательное свойство в столбце jsonb

#npgsql #ef-core-3.1

Вопрос:

Мне нужно спроецировать некоторые поля из столбца 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.

Ответ №1:

Вы забыли добавить GetInt32 (или любой другой тип) для reportNumber , точно так же, как у вас есть getString после shipmentMetadata . Чтобы это можно было перевести на SQL, вам нужно сообщить поставщику, какой тип вы ожидаете получить из элемента JSON.