2012-10-10 98 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

請看我編輯的答案。 –