1

Entity Framework 関数に SQLClient を使用しようとしていますが、いくつか問題があります。ワイルドカードを使用して比較できるようにID(データベースでは an int) を aに変換する必要があります。nvarchar

これはある程度機能します (つまり、エラーなしでビルドおよび実行されます) が、db 側で行う必要があることではなく、間違った結果が返されます。実際、数値を返す必要がある場合でも、0 行が返されます。

return "SqlServer.STR(ID) LIKE '824%'";

上記の行は、基本的にSQLの下の行に変換されます

SELECT COUNT(*) FROM Table1 WHERE STR(ID) LIKE '824%' 

SQL で必要なのは次の行 (または同様のもの) です。これは正しい行数を返すためです。

SELECT COUNT(*) FROM Table1 WHERE CONVERT(NVARCHAR(50), ID) LIKE '824%'

私は使用してみました:

return "CAST(ID AS NVARCHAR(50)) LIKE '824%'";

しかし、これにより実行時に次のエラーが発生します。

タイプ「NVARCHAR」が見つかりませんでした。必要なスキーマがロードされ、名前空間が正しくインポートされていることを確認してください。

SqlClient文字列関数、またはその他のバリアントを使用してこれを行う方法を教えてもらえますか?

皆さんありがとう。

4

1 に答える 1

2

SqlFunction.StringConvert() 関数を使用できます。int にはオーバーロードがないため、型キャストする必要があります

var test = dataContext.Table1
                      .Where(f => SqlFunctions.StringConvert((double) f.Id)
                                               .Trim()
                                               .StartsWith("824"))
                      .Select(f => SqlFunctions.StringConvert((double) f.Id)
                                               .Trim())
                      .ToList();

これは次のように変換されます。

SELECT 
LTRIM(RTRIM(STR( CAST( [Extent1].[Id] AS float)))) AS [C1]
FROM [dbo].[Table1] AS [Extent1]
WHERE (LTRIM(RTRIM(STR( CAST( [Extent1].[Id] AS float)))) LIKE N'4%')
于 2013-10-09T19:19:01.707 に答える