3

2 つのテーブル間で linq を sql サーバーに書き込む必要があります。関連するフィールドは異なる型です。1 つは string(nvarchar) で、もう 1 つは 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))

SQLはvarcharとnvarcharを比較できないため、そのクエリはnullを返します。linq to entity は に変換され、 に変換sqlfunction.stringFormatされstr('')ませんconvert(nvarchar,'')。nvarchar に変換するにはどうすればよいですか?

4

1 に答える 1

4

回避策があります:

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

これは次のように翻訳されます

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

これは、式全体をに持ち上げますnvarchar

しかし、との比較は問題charnvarcharならないはずだと思います。この問題は、変換結果をトリミングすることで解決される可能性が高くなります。

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