この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」を定数として宣言すると、「高速」SQLも生成できますが、実行時に「value」の値を変更できるようにしたいと思います。EntityFrameworkに「execsp_executesql」を生成しないように強制する方法はありますか?これは明らかにはるかに遅いのでスタイルsqlですか?