1

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

这在一定程度上有效(即它构建和执行时不会出错),但这不是我作为数据库端需要做的,它返回错误的结果。实际上,它返回 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 没有重载,所以你必须输入 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%')
于 2013-10-09T19:19:01.707 回答