2012-10-10 100 views
3

我必须写两个表之间的SQL Server的linq,相关的字段是在不同的类型。一个是字符串(nvarchar),另一个是int。LINQ to实体sqlFunction.string转换返回varchar而不是nvarchar

这里是我的LINQ:

from je in a 
join vP in b 
on je.BaseRef equals SqlFunctions.StringConvert((decimal) vP.DocEntry) 

SQL中的LINQ的结果是:

SELECT 
[Extent1].[Account] AS [Account] 
FROM [dbo].[a] AS [Extent1] 
JOIN [dbo].[b] AS [Extent2] ON ([Extent1].[BaseRef] = (STR(CAST([Extent2].[DocEntry] AS float)))) OR (([Extent1].[BaseRef] IS NULL) AND (STR(CAST([Extent2].[DocEntry] AS float)) IS NULL)) 

该查询返回NULL,因为SQL无法比拟的varchar和nvarchar。 linq to entity translate sqlfunction.stringFormat to str('')而不是convert(nvarchar,'')。 我该如何转换为nvarchar?

回答

3

有一个变通:

SqlFunctions.StringConvert((decimal) vP.DocEntry) + "" 

这将转化为

(STR(CAST([Extent2].[DocEntry] AS float))) + N'' 

又带动了整个表达式nvarchar

但我怀疑charnvarchar之间的比较应该不成问题。修正转换结果更有可能解决问题:

SqlFunctions.StringConvert((decimal) vP.DocEntry).Trim() 
+0

您好,感谢您的回复。我试过了,但它返回了varchar。 –

+0

你确定吗?我用'SQL_VARIANT_PROPERTY(STR(CAST(CAST(xxx AS float))+ N'','BaseType')'检查了一个类似的查询,它是'nvarchar'。但是你确定'char'和' nvarchar'是问题吗?他们应该比较一致。 –

+0

请看我编辑的答案。 –