SQLClient字符串函数NVARCHAR而不是STR

时间:2013-10-09 18:10:08

标签: c# entity-framework sqlclient

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

这在一定程度上起作用(即它构建并执行而没有错误),但是它不是我需要做的db side,它返回错误的结果。实际上,当它应该返回一个数字时,它返回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字符串函数或其他一些变体吗?

谢谢大家。

1 个答案:

答案 0 :(得分: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%')