Здравствуйте, LevLimin, Вы писали:
LL>Как я понял ситуацию, сначала npgsql пытается сделать numeric в decimal и уж потом LinqToDb переводит в double, но npgsql обламывается на операции numeric -> decimal
Ага, глянул
документацию, похоже postgresql хранит NaN даже для fixed point чисел (большинство баз и для floating point его не поддерживают). Значит тут надо на уровне DataReader конвертер менять, который в DataProvider настраивается. Одна проблема что я не вижу поддержки этого на уровне npgsql для decimal:
—
тут ничего похожего не видно
—
тут как раз поддержка обсуждается
Т.е. по сути я подозреваю сейчас оно падает в npgsql в NpgsqlDataReader.GetDecimal(). Судя по тому что для double npgsql NaN вроде как поддерживает, можно попробовать такой read expression в провайдере выставить:
SetProviderField<IDataReader, double, decimal>((r,i) => r.GetDouble(i));
так как SetProviderField protected, то надо либо наследоваться от PostgreSQLDataProvider либо напрямую добавлять конвертер в ReaderExpressions (оно public).
Если этот вариант не пройдет (Npgsql все равно через decimal вычитать данные будет пытаться), то тогда надо выбирать данные с преобразованием в double на уровне sql уже.