3

我必须在两个表之间编写 linq to sql server,相关字段的类型不同。一个是 string(nvarchar),另一个是 int。

这是我的 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 转换sqlfunction.stringFormatstr('')而不是convert(nvarchar,'')。如何转换为 nvarchar?

4

1 回答 1

4

有一个解决方法:

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

这将转化为

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

这将整个表达式提升到nvarchar.

但我怀疑和之间的比较char应该nvarchar没有问题。该问题更有可能通过修剪转换结果来解决:

SqlFunctions.StringConvert((decimal) vP.DocEntry).Trim()
于 2012-10-11T07:14:50.537 回答