Linq2DB 无法翻译 Where 子句中的映射列

我正在使用旧版 Oracle 数据库,该数据库在表上有一列,该列将布尔值存储为“Y”或“N”字符。

我已经像这样映射/转换了这个列:

MappingSchema.Default.SetConverter<char,bool>(ConvertToBoolean);
MappingSchema.Default.SetConverter<bool,char>(ConvertToChar);

ConvertToBooleanConvertToChar 只是在类型之间映射的函数。

这里是字段:

    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
zxcvbnmasdfghjkl1236 回答:Linq2DB 无法翻译 Where 子句中的映射列

您可以为您的特定 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

时使用
本文链接:https://www.f2er.com/751876.html

大家都在问