LINQ में Group by: शुरुआती लोगों के 5 आम सवाल

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

LINQ में Group by: वास्तविक उदाहरणों के साथ ग्रुपिंग को समझें

\n\n

अगर आपने C# में कभी कलेक्शन पर क्वेरी लिखी है, तो आपने जरूर सोचा होगा: "डेटा को ग्रुप कैसे करूं?" Stack Overflow पर group by in LINQ का टॉपिक सबसे लोकप्रिय है (हजारों व्यूज)। यह कोई संयोग नहीं है: ग्रुपिंग पहली नज़र में आसान लगती है, लेकिन असल में शुरुआती लोग अक्सर फंस जाते हैं — जैसे ग्रुप से पहला रिकॉर्ड कैसे चुनें, योग कैसे निकालें, या नेस्टेड ग्रुपिंग कैसे करें।

\n\n

इस लेख में हम LINQ GroupBy से जुड़े 5 सबसे आम सवालों के काम के जवाब देंगे। चलिए शुरू करते हैं!

\n\n

1. LINQ में GroupBy कैसे काम करता है? बेसिक सिंटैक्स

\n\n

GroupBy मेथड SQL के GROUP BY स्टेटमेंट की तरह है। यह डेटा को एक निश्चित की (key) के आधार पर ग्रुप में बांटता है। रिजल्ट IGrouping<TKey, TElement> ऑब्जेक्ट्स का कलेक्शन होता है, जहां हर ऑब्जेक्ट में एक की और उस ग्रुप के सभी एलिमेंट होते हैं।

\n\n

यहाँ एक सरल उदाहरण है। मान लीजिए हमारे पास छात्रों की लिस्ट है:

\n\n
public class Student\n{\n    public string Name { get; set; }\n    public string Group { get; set; }\n    public int Score { get; set; }\n}\n\nvar students = new List<Student>\n{\n    new Student { Name = "अन्ना", Group = "A", Score = 85 },\n    new Student { Name = "बोरिस", Group = "B", Score = 90 },\n    new Student { Name = "विका", Group = "A", Score = 78 },\n    new Student { Name = "ग्लेब", Group = "B", Score = 92 }\n};
\n\n

ग्रुप के नाम के आधार पर ग्रुप करें:

\n\n
var grouped = students.GroupBy(s => s.Group);\n\nforeach (var group in grouped)\n{\n    Console.WriteLine($"ग्रुप: {group.Key}");\n    foreach (var student in group)\n    {\n        Console.WriteLine($"  {student.Name} — {student.Score}");\n    }\n}
\n\n

आउटपुट:

\n
ग्रुप: A\n  अन्ना — 85\n  विका — 78\nग्रुप: B\n  बोरिस — 90\n  ग्लेब — 92
\n\n

यह आसान है। लेकिन असली मुश्किल बारीकियों में है।

\n\n

2. हर ग्रुप से पहला रिकॉर्ड कैसे चुनें?

\n\n

यह group by in LINQ पर सबसे लोकप्रिय सवाल है। मान लीजिए हमें हर ग्रुप से एक सबसे अच्छा छात्र चुनना है (सबसे ज्यादा स्कोर वाला)। यह कैसे करें?

\n\n

हल — GroupBy को First() या OrderByDescending के साथ जोड़ें:

\n\n
var bestStudents = students\n    .GroupBy(s => s.Group)\n    .Select(g => g.OrderByDescending(s => s.Score).First());\n\nforeach (var student in bestStudents)\n{\n    Console.WriteLine($"{student.Name} — {student.Group} — {student.Score}");\n}
\n\n

परिणाम: अन्ना (85) और ग्लेब (92)। ध्यान दें: Select के अंदर हम ग्रुप को सॉर्ट करते हैं और पहला एलिमेंट लेते हैं। यही है "LINQ group by first" का जवाब।

\n\n

महत्वपूर्ण: अगर ग्रुप खाली है तो First() एक्सेप्शन फेंकेगा। अगर ऐसा हो सकता है, तो FirstOrDefault() का उपयोग करें।

\n\n

3. ग्रुप के हिसाब से योग, गिनती या औसत कैसे निकालें?

\n\n

ग्रुपिंग के बाद अक्सर एलिमेंट्स को ट्रैवर्स करने के बजाय एग्रीगेटेड वैल्यू चाहिए होती है। जैसे, हर ग्रुप के स्कोर का योग या औसत।

\n\n

Sum, Count, Average का उपयोग करें:

\n\n
var groupStats = students\n    .GroupBy(s => s.Group)\n    .Select(g => new\n    {\n        Group = g.Key,\n        Count = g.Count(),\n        TotalScore = g.Sum(s => s.Score),\n        AverageScore = g.Average(s => s.Score)\n    });\n\nforeach (var stat in groupStats)\n{\n    Console.WriteLine($"ग्रुप {stat.Group}: {stat.Count} छात्र, कुल {stat.TotalScore}, औसत {stat.AverageScore:F2}");\n}
\n\n

आउटपुट:

\n
ग्रुप A: 2 छात्र, कुल 163, औसत 81.50\nग्रुप B: 2 छात्र, कुल 182, औसत 91.00
\n\n

आप Min और Max का भी उपयोग कर सकते हैं —

ब्लॉग

पुस्तक अनुशंसाएँ