Linq to sql LINQ到SQL CompiledQuery.Compile()以及更新、删除、插入?

Linq to sql LINQ到SQL CompiledQuery.Compile()以及更新、删除、插入?,linq-to-sql,precompiled,Linq To Sql,Precompiled,全部, 因此,我已将LINQ to SQL中的所有select查询转换为使用CompiledQueries来加快速度。到目前为止,select语句非常有效,但我还没有弄清楚如何预编译insert、update或delete语句 当然,当您在LINQtoSQL中插入、删除或更新时,必须使用对象模型。但很明显,它会在某个地方生成一个查询,最好预先编译并存储在一个静态成员中 这可能吗?在未预编译的情况下,LINQ的更新、删除和插入性能如何?我可以看到它比select要快得多,因为它们下面的操作要简单得

全部,

因此,我已将LINQ to SQL中的所有select查询转换为使用CompiledQueries来加快速度。到目前为止,select语句非常有效,但我还没有弄清楚如何预编译insert、update或delete语句

当然,当您在LINQtoSQL中插入、删除或更新时,必须使用对象模型。但很明显,它会在某个地方生成一个查询,最好预先编译并存储在一个静态成员中


这可能吗?在未预编译的情况下,LINQ的更新、删除和插入性能如何?我可以看到它比select要快得多,因为它们下面的操作要简单得多,而且“动态性”要小得多。

有很大的不同。Linq到SQL select查询可以是大型复杂表达式树。这些可能需要一段时间“编译”。在本例中,合并到一些可以在SQL Server上运行的T-SQL。因此,缓存一个操作的结果以便可以重用是有意义的

然而,其他删除、更新和插入操作都是简单的操作,不需要将表达式树转换为T-SQL(LINQ本身就是查询)。不幸的是,我们接受过培训,认为执行这些其他操作的SQL代码是“查询”,我们实际上并没有询问任何信息


这些操作仅由DataContext定义,而不是由LINQ定义,因此执行这些函数的代码已经编译。

我认为只有三个插入才能编译和重用,因为delete非常简单(从表中删除,其中键…)“更新”仅更新已更改的字段,因此每个更新操作都会有所不同


[)amien

L2S使用“sp_executeSQL”,因此在您第一次运行它之后,它将在存储过程执行计划缓存中。后续运行(同一查询-不同参数)将重用缓存中已编译的计划。因此,您所要求的是由SQL Server“幕后”自动处理的。

有趣的是,我认为我的部分想法是更新和删除可能更复杂。在标准SQL中,它们当然可能是-在更新或删除结束时,您可能会有一些巨大的复杂WHERE语句Delete.但是在LINQ to SQL中,您只会使用主键或updated state.Cool.是有意义的。我想我忘了在LINQ to SQL中,更新和删除查询永远不会有复杂的WHERE子句。它们总是基于ID进行更新/删除。而LINQ to SQL中的INSERT可能根本就没有WHERE子句。…True-就执行计划而言。我所说的“预编译”是将LINQ从其表达式树解析为SQL的部分。请参阅CompiledQuery.Compile()方法。