नोट: दिए गए स्रोत कोड में Take/Skip के बजाय Equals कम्पेरिजन का उदाहरण है। यहाँ Take और Skip का सही उपयोग बताया गया है।
Take और Skip ऑपरेटर्स
- Take(n): सीक्वेंस के पहले
nएलिमेंट्स लौटाता है - Skip(n): सीक्वेंस के पहले
nएलिमेंट्स को छोड़कर बाकी लौटाता है
पेजिनेशन के लिए संयुक्त उपयोग
// पेज 1 (पहले 10)
var page1 = items.Skip(0).Take(10);
// पेज 2 (अगले 10)
var page2 = items.Skip(10).Take(10);
// पेज n
var pageN = items.Skip((pageNumber - 1) * pageSize).Take(pageSize);
उदाहरण 1: Skip
class Program {
static void Main(string[] args) {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
System.Console.WriteLine($"Total count: {numbers.Count()}"); // 28
var skipRes = numbers.Skip(5); // पहले 5 छोड़ें
System.Console.WriteLine($"After Skip(5): {skipRes.Count()}"); // 23
Console.ReadLine();
}
}
आउटपुट
Total count: 28
After Skip(5): 23
उदाहरण 2: Take
class Program {
static void Main(string[] args) {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
System.Console.WriteLine($"Total count: {numbers.Count()}"); // 28
var takeRes = numbers.Take(5); // पहले 5 लें
System.Console.WriteLine($"After Take(5): {takeRes.Count()}"); // 5
Console.ReadLine();
}
}
आउटपुट
Total count: 28
After Take(5): 5
उदाहरण 3: Skip + Take संयुक्त (पेजिनेशन)
class Program {
static void Main(string[] args) {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
System.Console.WriteLine($"Total count: {numbers.Count()}"); // 28
// पहले 10 छोड़ें, फिर 18 लें (एलिमेंट्स 11-28)
var takeSkipRes = numbers.Skip(10).Take(18);
System.Console.WriteLine($"Skip(10).Take(18): {takeSkipRes.Count()}"); // 18
// एलिमेंट्स प्रिंट करें
Console.WriteLine("Elements: " + string.Join(", ", takeSkipRes));
Console.ReadLine();
}
}
आउटपुट
Total count: 28
Skip(10).Take(18): 18
Elements: 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8
महत्वपूर्ण व्यवहार
- Skip उपलब्ध एलिमेंट्स से कम होने पर खाली सीक्वेंस लौटाता है (एक्सेप्शन नहीं)
- Take उपलब्ध एलिमेंट्स से अधिक माँगने पर उपलब्ध एलिमेंट्स लौटाता है
- ऑर्डर मायने रखता है:
Skip().Take()सही है,Take().Skip()अलग परिणाम देता है - डिफर्ड एक्ज़ीक्यूशन: क्वेरी तभी चलती है जब एन्यूमरेट किया जाए
SQL समकक्ष
-- Skip(10).Take(18) के बराबर
SELECT * FROM table ORDER BY id OFFSET 10 ROWS FETCH NEXT 18 ROWS ONLY;
उन्नत: SkipWhile / TakeWhile
// कंडीशन सत्य होने तक छोड़ें
var result = numbers.SkipWhile(n => n < 5).TakeWhile(n => n > 3);