2012-03-15 15 views
23

का उपयोग करके पेजिंग, पहले 10 रिकॉर्ड का चयन कैसे करें, फिर अगले 10, फिर अगले 10, और जब तक सरणी समाप्त नहीं होगी।पहले 10 रिकॉर्ड्स का चयन करना, फिर अगला 10, लिंक

Phrases = bannersPhrases.Select(x=>x.Phrase).Take(10).ToArray() 

अगले 10 रिकॉर्ड कैसे प्राप्त करें?

उत्तर

67
var total = bannersPhrases.Select(p => p.Phrase).Count(); 
var pageSize = 10; // set your page size, which is number of records per page 

var page = 1; // set current page number, must be >= 1 

var skip = pageSize * (page-1); 

var canPage = skip < total; 

if (canPage) // do what you wish if you can page no further 
    return; 

Phrases = bannersPhrases.Select(p => p.Phrase) 
      .Skip(skip) 
      .Take(pageSize) 
      .ToArray(); 
+3

+1 काफी कुछ यह केवल जवाब यह है कि वास्तव में पृष्ठों का चयन करता है, बाकी सिर्फ आइटम का चयन 11-20 ;-) –

+2

तो है बैनर वाक्यांश एक 'IQueryable' बाकी टिप्पणी को अनदेखा करता है। कृपया घर पर ऐसा मत करो! 'एन्यूमेरेबल .किप 'ओ (एन) है! :-) (यदि आप मुझ पर भरोसा नहीं करते हैं, तो इसे IlSpy/परावर्तक के माध्यम से देखने का प्रयास करें)। मैं यह भी ध्यान दूंगा कि आप बैनर कैश नहीं कर रहे हैं। मुझे आशा है कि बैनर प्राइज़ एक निश्चित संग्रह है, क्योंकि यदि यह भी 'आईनेमरेबल' है तो यह प्रत्येक पृष्ठ के लिए पुन: उत्पन्न होगा। – xanatos

6

आप .Skip() है इस का उपयोग अगले 10 आइटम वापस आ जाएगी कर सकते हैं:

Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray() 
3

आप उपयोग कर सकते हैं Skip विस्तार विधि

Phrases = bannersPhrases.Select(x=>x.Phrase).Skip(10).Take(10).ToArray() 
17

आप पेजिंग कर रहे हैं और आप बस चाहते हैं किसी अन्य पृष्ठ पर छोड़कर आप Skip और Take का उपयोग अन्य उत्तरों में वर्णित के रूप में कर सकते हैं। हालांकि, यदि आप पूरे अनुक्रम को किसी विशेष आकार के हिस्सों में समूह बनाना चाहते हैं तो आप इसके बजाय GroupBy का उपयोग कर सकते हैं।

var groupSize = 4; 
// The characters 'a' - 'z'. 
var source = Enumerable.Range(0, 26).Select(i => (Char) ('a' + i)); 
var groups = source 
    .Select((x, i) => new { Item = x, Index = i }) 
    .GroupBy(x => x.Index/groupSize, x => x.Item); 
foreach (var group in groups) 
    Console.WriteLine("{0}: {1}", group.Key, String.Join(", ", group)); 

उत्पादन होता है: यहाँ एक छोटा सा उदाहरण है

 
0: a, b, c, d 
1: e, f, g, h 
2: i, j, k, l 
3: m, n, o, p 
4: q, r, s, t 
5: u, v, w, x 
6: y, z 
+0

क्या आप कृपया बता सकते हैं कि आपकी linq क्वेरी कैसे काम करती है? मैंने हमेशा सोचा कि आपको केवल चयन क्वेरी में संग्रह तत्व तक पहुंच है। यहां पर आपके पास संग्रह तत्व और एक काल्पनिक I तक पहुंच है, जिसे मैं समझ नहीं पा रहा हूं कि यह कहां से आया था। –

+1

@ पार्थशाह: यह एक "काल्पनिक I" नहीं है। यह स्रोत अनुक्रम में तत्व का सूचकांक है। मैं जिस अधिभार का उपयोग कर रहा हूं वह है [एमएसडीएन पर प्रलेखित] (http://msdn.microsoft.com/en-us/library/bb534869 (v = vs.110) .एएसपीएक्स)। मैं स्रोत क्रम को अनुक्रम में प्रोजेक्ट करता हूं जो उस इंडेक्स को शामिल करता है जिसे मैं तब समूह के लिए उपयोग करता हूं। –

+1

इसे काल्पनिक कहने के लिए खेद है। वाह यह इतनी अच्छी सवाल है! श्रीमान ने मेरा वोट अर्जित किया! –

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