#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.