这个 LINQ 表达式:
var result = entities.Cases
.Where(c => c.House.Address.Contains("otte"))
.ToList();
在服务器上执行这个 sql:
SELECT
...
--rows
...
FROM [dbo].[Case] AS [Extent1]
INNER JOIN [dbo].[House] AS [Extent2] ON [Extent1].[HouseID_FK] = [Extent2].[HouseID]
WHERE [Extent2].[Address] LIKE '%otte%'
这大约需要 100 毫秒才能完成。
这个 LINQ 表达式:
var value = "otte";
var result = entities.Cases
.Where(c => c.House.Address.Contains(value))
.ToList();
在服务器上执行这个 sql:
exec sp_executesql N'SELECT
...
--rows
...
FROM [dbo].[Case] AS [Extent1]
INNER JOIN [dbo].[House] AS [Extent2] ON [Extent1].[HouseID_FK] = [Extent2].[HouseID]
WHERE [Extent2].[Address] LIKE @p__linq__0 ESCAPE N''~''',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'%otte%'
这大约需要 1400 毫秒才能完成。
如果我将“value”声明为常量,我也可以让它生成“fast”sql,但我希望能够在运行时更改“value”的值。有什么方法可以强制实体框架不生成“exec sp_executesql” - 样式 sql,因为这显然要慢得多?