如何强制重新编译 Linq to SQL 查询的执行计划?

Den*_*elt 3 sql-server linq-to-sql sql-execution-plan

我有一个动态创建的 LINQ to SQL 查询。有趣的是,当我在 SQL Management Studio 中运行它时,速度非常快。当我从 L2S 运行它时,它会在一段时间后变得非常慢。

这可能是因为查询计划/执行计划。当我重新启动 SQL Server 时,L2S 查询也再次闪电般快速。

现在使用 T-SQL,您可以使用 WITH RECOMPILE。但是如何用 L2S 做到这一点呢?

Mar*_*wul 5

正如我在下面的线程中发现的那样,您可以使用DataContext.GetCommand(IQueryable)来获取DbCommand要执行的查询的a 。您可以将“OPTION (RECOMPILE)”添加到命令文本中,从中打开阅读器,然后使用[DataContext.Translate<T>] 1将打开的阅读器转换为您想要的实体类型。

http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/def80609-eaf2-4631-8d3d-ad10fc9aedfa

例如,给定一个DataContext dataContext

IQueryable<string> exampleItemsQuery = dataContext.Table.Where(…).Select(…); //etc

DbCommand command = dataContext.GetCommand(exampleItemsQuery);
command.CommandText += Environment.NewLine + "OPTION (RECOMPILE)";
if (dataContext.Connection.State != ConnectionState.Open)
   dataContext.Connection.Open();

IEnumerable<string> exampleItems = dataContext.Translate<string>(command.ExecuteReader(CommandBehavior.CloseConnection));
Run Code Online (Sandbox Code Playgroud)