【发布时间】:2021-03-16 08:56:07
【问题描述】:
我正在使用旧版 Oracle 数据库,该数据库在表中有一列将布尔值存储为“Y”或“N”字符。
我已经像这样映射/转换了这个列:
MappingSchema.Default.SetConverter<char, bool>(ConvertToBoolean);
MappingSchema.Default.SetConverter<bool, char>(ConvertToChar);
ConvertToBoolean & ConvertToChar 只是类型之间映射的函数。
这是字段:
private char hasDog;
[Column("HAS_DOG")]
public bool HasDog
{
get => ConvertToBoolean(hasDog);
set => hasDog = ConvertToChar(value);
}
这对于简单地检索数据很有效,但是,它似乎是以下内容的翻译:
var humanQuery = (from human in database.Humans
join vetVisit in database.VetVisits on human.Identifier equals vetVisit.Identifier
select new HumanModel(
human.Identifier
human.Name,
human.HasDog,
vetVisit.Date,
vetVisit.Year,
vetVisit.PaymentDue
));
// humanQuery is filtered by year here
var query = from vetVisits in database.VetVisits
select new VetPaymentModel(
(humanQuery).First().Year,
(humanQuery).Where(q => q.HasDog).Sum(q => q.PaymentDue), -- These 2 lines aren't correctly translated to Y/N
(humanQuery).Where(q => !q.HasDog).Sum(q => q.PaymentDue)
);
如上所述,这里的.Where 子句不会将HasDog 的布尔比较为真/假转换为相关的Y/N 值,而是0/1 并导致错误
ORA-01722: invalid number
有什么办法可以处理这种情况吗?我希望生成的 SQL 使用指定的 Where 子句检查 HAS_DOG = 'Y' :)
备注
- 我这里没有使用EntityFramework,这个查询所在的应用模块没有使用EF/EFCore
【问题讨论】:
标签: sql database oracle oracle12c linq2db