选择默认字符串值时,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",
...