我正在尝试将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字符串函数或其他一些变体吗?
谢谢大家。
答案 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%')