linq join子句中的字符串串联

of1yzvn4  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(147)

我在LINQ JOIN条件中添加字符串连接以及在Oracle sql查询中对其进行转换时遇到了一些问题。在使用EF的旧解决方案中,这一点曾经很好地工作。让我们以下面的示例为例:

var query = (from sub in connection.InvoiceSubStatuses
                     join lab in connection.Litteral
                     on "STN_ASP_PIE_STATUT_EXTERNE[" + sub.StatusCode + "]" + "{" + vendorId + "}" equals lab.Code
                     where   sub.IsFlaggedDelete == 0
                     select new InvoiceSubStatusDTO
                     {
                         Description = lab.Libelle,
                         StatusCode = sub.StatusCode,
                         Id = sub.Id,
                         Culture = lab.Culture,
                         StatusType = sub.StatusType

                     });

这被解释为以下sql代码:

SELECT "l".LIBELLE "Description", "s".CODE_STATUSFAC "StatusCode", "s".SYS_ID "Id", "l".CULTURE "Culture", "s".TYPE_STATUSFAC "StatusType"
FROM STATUSFAC "s"
INNER JOIN LITTERAUX "l" ON N'STN_ASP_PIE_STATUT_EXTERNE[' || COALESCE("s".CODE_STATUSFAC, N'') || N']' || N'{' || TO_NCHAR(:p__vendorId_0) || N'}' = "l".CODE
WHERE ("s".DIGITAL_LETTER = 1) AND ("s".SYS_FLAG_DEL = 0)

这会导致一个错误,因为Oracle不允许在COALESCE(COALESCE(“s”.CODE_STATUSFAC,N'))中包含'N'文本文字。如果我手动将其更改为COALESCE(“s”.CODE_STATUSFAC,''),查询将正常工作,但我不知道如何从Linq中解决此问题。
是否有人遇到过此问题并找到了解决方法?谢谢

bqf10yzr

bqf10yzr1#

因此,问题是由于DB中的列不可为空,因此当尝试进行字符串连接时,Oracle提供程序会添加COALESCE。因此,为了绕过此问题,我在StatusCode列上添加了属性[Required]。

相关问题