2015-06-11 17 views
0

QI已經繼承了對MSSql的多個存儲過程調用。這個包含幾個連接。我的問題是:在這種情況下使用L2E會比通過ADO直接調用存儲過程更快嗎?這裏是我的LINQ查詢:Linq2實例比具有多個連接的storedProc更快

public List<object> getDNISData(int DNIS) 
    { 
     List<object> DataItems = new List<object>(); 
     using (VPEntities VPCtx = new VPEntities()) 
     { 
      var DD = 
       from nm in VPCtx.NumberMaps 
       join g in VPCtx.Greetings on nm.Greeting_ID equals g.Greeting_ID 
       join p1 in VPCtx.Prompts on nm.Prompt1_ID equals p1.Prompt_ID 
       join p2 in VPCtx.Prompts on nm.Prompt2_ID equals p2.Prompt_ID 
       join p3 in VPCtx.Prompts on nm.Prompt3_ID equals p3.Prompt_ID 
       join p4 in VPCtx.Prompts on nm.Prompt4_ID equals p4.Prompt_ID 
       join p5 in VPCtx.Prompts on nm.Prompt5_ID equals p5.Prompt_ID 
       join h1 in VPCtx.HoldMsgs on nm.HoldMsg1_ID equals h1.HoldMsg_ID 
       join h2 in VPCtx.HoldMsgs on nm.HoldMsg2_ID equals h2.HoldMsg_ID 
       join hm in VPCtx.HoldMusics on nm.HoldMusic_ID equals hm.HoldMusic_ID 
       join d in VPCtx.Disclaimers on nm.Disclaimer_ID equals d.Disclaimer_ID 
       where nm.DNIS == DNIS && nm.Enabled 
       select (new {NumberID = nm.Number_ID, PortfolioID = nm.Portfolio_ID, PropertyID = nm.Property_ID, Adsource = nm.AdSource_ID, 
            PlanTypeID = nm.PlanType_ID, GreetingFile = g.GreetingFile, 
            PromptFile1 = p1.PromptFile, Accepts1 = p1.Accepts, PromptAction_ID1 = p1.PromptAction_ID, 
            PromptFile2 = p2.PromptFile, Accepts2 = p2.Accepts, PromptAction_ID2 = p2.PromptAction_ID, 
            PromptFile3 = p3.PromptFile, Accepts3 = p3.Accepts, PromptAction_ID3 = p3.PromptAction_ID, 
            PromptFile4 = p4.PromptFile, Accepts4 = p4.Accepts, PromptAction_ID4 = p4.PromptAction_ID, 
            PromptFile5 = p5.PromptFile, Accepts5 = p5.Accepts, PromptAction_ID5 = p5.PromptAction_ID, 
            HoldMsgFile1 = h1.HoldMsgFile, HoldMsgFile2 = h2.HoldMsgFile, 
            Destination1 = nm.Destination1, Destination2 = nm.Destination2, Destination3 = nm.Destination3, 
            UIType_ID = nm.UIType_ID, 
            RingCount = nm.RingCount, 
            Enabled = nm.Enabled, 
            Spanish = nm.Spanish, 
            HoldMusicFile = hm.HoldMusicFile, 
            Template_ID = nm.Template_ID, 
            FrontLineForward = nm.FrontLineForward, 
            DisclaimerFIle = d.DisclaimerFile}); 
      DataItems = DD.ToList<object>(); 

      return DataItems; 
     }; 
    } 
+2

通過探查器查看生成的查詢,將生成的查詢的執行計劃與proc的執行計劃進行比較,然後才能知道。我們無法知道這一點。 – Habib

+0

這就是爲什麼linq有時會過分,愛TSQL –

回答

0

如果LINQ查詢有包含在存儲過程中的SQL查詢的直接轉換,它可能會略快於調用存儲過程 - 不是因爲它會影響性能,但是因爲LINQ to Entities必須首先將查詢轉換爲SQL。

不管數據的大小如何,該翻譯的成本都是相同的,但是如果查詢在數據庫上運行速度非常快,但它們之間的差異可能會很明顯,但是您會調用它, 多次。在你注意到性能是一個問題之前,我建議儘可能讓代碼最容易維護。

相關問題