实体框架5.0 L2S包含,StartsWith,Ends由于额外的引号而无法正常工作

时间:2013-02-22 18:58:13

标签: sql entity-framework sql-like contains startswith

我有一个简单的请求,过滤数据,命令它和来自jQuery的页面 自动完成嵌入在Kendo Grid的工具栏中。这是拨打电话的代码。

Service.Get(s=> s.Name.Contains("Alcurt QI, In"), o => o.Name, 1, 15)

如果我从网上输入结果SQL是正确的,但它嵌入了添加 单引号。使用SQL事件探查器捕获SQL。这是一个片段 结果:

WHERE [Extent1].[Name] LIKE @p__linq__0 ESCAPE N''~''
)  AS [Project1]
)  AS [Project1]
WHERE [Project1].[row_number] > 0
ORDER BY [Project1].[Name] ASC',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'%''Alcurt QI, In''%'

“名称”列为nvarchar。

您看到它正在使用LIKE,但请注意额外的引号

@p__linq__0=N'%''Alcurt QI, In''%'

如果我删除多余的引号,查询工作正常。我在SQL Manager中测试了它。

然后我写了一个单元测试来模拟HttpContext并调用相同的控制器动作 并且SQL工作正常。这是来自它的SQL而不是缺少的引号。

WHERE [Extent1].[Name] LIKE @p__linq__0 ESCAPE ''~''
)  AS [Project1]
)  AS [Project1]
WHERE [Project1].[row_number] > 0
ORDER BY [Project1].[Name] ASC',N'@p__linq__0 varchar(8000)',@p__linq__0='%Alcurt QI, In%'
  • 操作系统是Windows 7
  • Visual Studio 2012
  • Nuget的实体框架,5.0,dBContext
  • 系统是MVC 4 ntier
  • 工具栏中具有自动完成功能的请求者Kendo Grid。

我已经验证了EntityFramework版本等。

为什么?

1 个答案:

答案 0 :(得分:1)

在审查结果后,我无法相信我所看到的。所以我退后一步,从一开始就采取了新的看法,在报价旁边有一个单引号。所以系统按设计运行。