SQLClient String Function NVARCHAR instead of STR

本文关键字:of STR instead NVARCHAR String Function SQLClient | 更新日期: 2023-09-27 18:34:42

我正在尝试将SQLClient用于实体框架函数,但是我遇到了一些问题。我需要将ID(在数据库中是一个int(转换为nvarchar,以便我可以使用通配符进行比较。

这在一定程度上有效(即它构建和执行时没有错误(,但是这不是我作为数据库端需要做的,它返回错误的结果。事实上,它返回 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 字符串函数或其他变体来做到这一点?

谢谢大家。

SQLClient String Function NVARCHAR instead of STR

您可以使用

SqlFunction.StringConvert(( 函数。int 没有重载,所以你必须键入 cast

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%')