我有一个动态创建的 LINQ to SQL 查询。有趣的是,当我在 SQL Management Studio 中运行它时,速度快如闪电。当我从 L2S 运行它时,一段时间后它变得非常慢。
这可能是由于查询计划/执行计划造成的。当我重新启动 SQL Server 时,L2S 查询也再次变得快如闪电。
现在,通过 T-SQL,您可以使用“WITH RECOMPILE”。但如何使用 L2S 做到这一点呢?
正如我在下面的线程中发现的,您可以使用DataContext.GetCommand(IQueryable)
得到一个DbCommand
对于您要执行的查询。您可以将“选项(重新编译)”添加到命令文本中,然后打开阅读器,然后使用[DataContext.Translate<T>
]1 https://learn.microsoft.com/en-us/dotnet/api/system.data.linq.datacontext.translate将打开的阅读器转换为您想要的实体类型。
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/def80609-eaf2-4631-8d3d-ad10fc9aedfa 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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)