2011-03-17 6 views
9

यदि मैं 20 से 39 तक रिकॉर्ड प्राप्त करना चाहता हूं, या किसी MSSQL तालिका से 40 से 59 तक प्राप्त करना चाहता हूं।एसक्यूएल टेबल पेजिंग प्रदर्शन ... ईएफ 4 + लिंक स्किप + एसक्यूएल टेबल पर "पेजिंग" का अनुरोध करने के लिए टीएसक्यूएल पैरा का उपयोग करने के प्रदर्शन में बराबर है?

चूंकि मैं एमवीसी और ईएफ 4 का उपयोग कर रहा हूं, तो यह वही प्रदर्शन है यदि मैं सिर्फ एक लिंक पूछता हूं और छोड़ता हूं() और टेक() प्रक्रिया को पेजिंग का अनुरोध करने के लिए .... या यह गेटलिस्ट पर ऐसा करना बेहतर है() संग्रहीत प्रक्रिया स्वयं?

var data = context.Posts.OrderBy(p => p.Id).Skip(20).Take(20).ToList(); 

यह इस एसक्यूएल का उत्पादन करेगा:

उत्तर

14

आप इस LINQ क्वेरी निष्पादित हैं

SELECT TOP (20) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Text] AS [Text] 
FROM (SELECT 
     [Extent1].[Id] AS [Id], 
     [Extent1].[Text] AS [Text], 
     row_number() OVER (ORDER BY [Extent1].[Id] ASC) AS [row_number] 
    FROM [dbo].[Posts] AS [Extent1] 
) AS [Extent1] 
WHERE [Extent1].[row_number] > 20 
ORDER BY [Extent1].[Id] ASC 

यह आप अपने संग्रहीत प्रक्रिया में हैं बल्कि अर्थ में लिखते थे कस्टम एसक्यूएल की तरह इस तरह के अच्छा नहीं है प्रदर्शन का यह वही है। डेटाबेस पर पेजिंग किया जाता है।

+1

पुष्टि करने के लिए, आप बता रहे हैं कि उपरोक्त LINQ क्वेरी वास्तव में उसी प्रदर्शन के साथ परिणाम उत्पन्न करेगी जैसे कि हम ऊपर SQL क्वेरी का उपयोग कर रहे थे ... क्या यह सही है? –

+1

हां। उपरोक्त linq क्वेरी ऊपर एसक्यूएल के रूप में निष्पादित किया गया है। –

संबंधित मुद्दे