2010-03-31 9 views
19

मैंने किसी चीज़ allStudents = Dictionary<ClassRoom, List<Student>>()सी # LINQ

Linq में मैं सभी छात्रों को, जो पुरुष हैं की एक सूची कैसे प्राप्त होता है? (छात्र। लिंग == "एम") सभी कक्षाओं से?

इयान

+0

@phsr इससे कोई फर्क पड़ता है? – baron

+0

स्टैक ओवरफ्लो पर बहुत से होमवर्क प्रश्न हैं। बस उचित टैग करें। (किसी भी मामले में, मुझे नहीं लगता कि यह एक है।) – harpo

+4

मैंने उन वस्तुओं का उपयोग किया क्योंकि वे सार्वभौमिक रूप से समझा जाएगा। वास्तविक व्यापार वस्तुओं को सामान्य उपयोगकर्ताओं के लिए नहीं जाना जाएगा। मैंने होमवर्क करने के लिए कई साल पहले भी स्नातक की उपाधि प्राप्त की थी;) –

उत्तर

20

निम्नलिखित

var maleStudents = allStudents 
    .SelectMany(x => x.Values) 
    .Where(x => x.Gender=="m"); 

यह करने के लिए चाल SelectMany ऑपरेशन है की कोशिश करो। इसका List<Student> का संग्रह Student के एक संग्रह में फ़्लैटन करने का प्रभाव है। परिणामी सूची वही है जैसे आप प्रत्येक सूची को सामने से ऊपर लाएंगे।

+0

यह बीटीडब्ल्यू, – vittore

+2

से नीचे सुझाए गए टॉमस की तुलना में तेज़ी से काम करेगा, सी # कंपाइलर क्वेरी को थोड़ा और जटिल कोड में अनुवाद करता है, लेकिन मुझे नहीं लगता कि अंतर किसी भी उचित परिदृश्य में मामला। समाधान को चुनना अधिक महत्वपूर्ण है जो अधिक पठनीय दिखता है (जो व्यक्तिगत राय है)। –

18

आप नेस्टेड from खंड का उपयोग कर सकते हैं। पहले from अपने छात्रों (शब्दकोश से एक आइटम) के साथ सभी वर्गों का चयन करता है, जिसे KeyValuePair<ClassRoom, List<Student>> के रूप में दर्शाया गया है। तो फिर तुम Value संपत्ति का उपयोग कर क्लास से सभी छात्रों का चयन कर उन्हें फ़िल्टर कर सकते हैं: कवर के तहत

var q = from cls in allStudents 
     from s in cls.Value 
     where s.Gender == "M" select s; 

, नेस्टेड from खंड SelectMany विधि कॉल करने के लिए अनुवाद किया है।