选择默认字符串值时,C#Left join linq将导致ORA-12704

选择默认字符串值时,C#Left join linq将导致ORA-12704,c#,oracle,linq,C#,Oracle,Linq,我正在尝试执行两个表的左联接。从第二个表中,我只想选择名称。但是,如果联接找不到相应的项,我想选择一个默认字符串作为名称。我的代码: var query = from order in _context.Orders join project in _context.Projects on order.ProjectId equals project.Id into orderjoin from item in or

我正在尝试执行两个表的左联接。从第二个表中,我只想选择名称。但是,如果联接找不到相应的项,我想选择一个默认字符串作为名称。我的代码:

var query = from order in _context.Orders
            join project in _context.Projects on order.ProjectId equals project.Id
                into orderjoin
            from item in orderjoin.DefaultIfEmpty()
            select
                new ResultModel
                {
                    ProjectName = item.Name ?? "deleted project",
                    ProjectId = order.ProjectId,
                    Origin = order.Origin,
                    Destination = order.Destination,
                    ...
                };
导致ORA错误:

System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the command definition. See the inner exception for details.
  ----> Oracle.ManagedDataAccess.Client.OracleException : ORA-12704: character set mismatch

我当然可以删除条件,迭代结果并替换空值,但我更喜欢更干净的解决方案。如何避免此错误?

问题似乎是特定列是NVARCHAR

生成的查询将为:

...,
CASE WHEN ("Extent2"."NAME" IS NULL) THEN 'deleted project' ELSE "Extent2"."NAME" END AS "C1",
...
但是,为了使其工作,N前缀应该用于字符串常量。要输入此前缀,我必须替换该行:

ProjectName = item.Name ?? "deleted project",
作者:

现在,生成的SQL读取:

...,
CASE WHEN ("Extent2"."NAME" IS NULL) THEN N'deleted project' ELSE "Extent2"."NAME" END AS "C1",
...

它可以工作。

试试
ProjectName=item==null?“已删除项目”:项目名称
instead@user3185569:这是完全相同的结果。可能会有帮助。很好的解决方案
DbFunctions.AsUnicode(“删除的项目”)
为我工作
...,
CASE WHEN ("Extent2"."NAME" IS NULL) THEN N'deleted project' ELSE "Extent2"."NAME" END AS "C1",
...