我正在使用旧版 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