如何解决Linq2DB 无法翻译 Where 子句中的映射列
我正在使用旧版 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'
:)
注意事项
解决方法
您可以为您的特定 DataConnection
定义新的映射架构:
var ms = new MappingSchema();
builder = ms.GetFluentMappingBuilder();
builder.Entity<Human>()
.Property(e => e.HasDog)
.HasConversion(v => v ? 'Y' : 'N',p => p == 'Y');
创建此架构 ONCE 并在创建 DataConnection
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。