我有一个像这样的查询linq:
var query = from c in Context.Customers select c;
var result = query.ToList();
Linq查询生成此tsql代码:
exec sp_executesql N'SELECT
[Project1].[Id] AS [Id],
[Project1].[Name] AS [Name],
[Project1].[Email] AS [Email]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Email] AS [Email]
FROM [dbo].[Customers] AS [Extent1] ) AS [Project1]
有没有办法不生成子查询?
答案 0 :(得分:5)
您是否有证据表明该查询导致性能问题?我想查询优化器很容易识别出来。
如果您在分析查询是性能问题后确定(疑点) - 然后 那么 - 您可以简单地将查询转换为存储过程,并称之为。
答案 1 :(得分:2)
你使用像Linq这样的工具,因为你不想编写SQL,在放弃之前你应该至少比较你提出的SQL的查询计划与工具生成的查询计划。我目前无法访问SQL Studio,但如果查询计划不相同,我会有点惊讶......
编辑:有机会查看查询计划,它们实际上是相同的。答案 2 :(得分:1)
简答:不,你不能修改那个查询。
答案很长:如果你想重新实现Linq提供程序和查询生成器,那么也许有办法,但我怀疑你想这样做。您还可以实现自定义EF provider wrapper,它将从EF传递查询并重新格式化,但这也很难 - 而且速度很慢。你打算为SQL查询编写自定义解释器吗?