簡體   English   中英

改進從實體框架生成的查詢

[英]Improve query generated from entity framework

我有一個像這樣的查詢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]

有沒有辦法不生成子查詢?

您是否有證據表明該查詢導致性能問題? 我想查詢優化器很容易識別出來。

如果您在分析查詢是性能問題(可疑)后確定 - 只有這樣 - 您可以簡單地將查詢轉換為存儲過程,然后調用它。

您使用像Linq這樣的工具,因為您不想編寫SQL,在放棄之前,您至少應該比較建議的SQL的查詢計划與工具生成的查詢計划。 我目前無法訪問SQL Studio,但如果查詢計划不相同,我會有點驚訝......

編輯:有機會查看查詢計划,它們實際上是相同的。

簡答:不,你不能修改那個查詢。

答案很長:如果你想重新實現Linq提供程序和查詢生成器,那么也許有一種方法,但我懷疑你想這樣做。 您還可以實現自定義EF提供程序包裝器 ,它將從EF傳遞查詢並重新格式化,但這也很難 - 而且速度很慢。 你打算為SQL查詢編寫自定義解釋器嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM