दिलचस्प पोस्ट
कैसे ठीक से एक पीडीओ कनेक्शन स्थापित करने के लिए तुम कहाँ से jQuery पुस्तकालय शामिल करते हैं? Google JSAPI? CDN? एंड्रॉइड छविदृश्य ज़ूम इन और ज़ूम-आउट AppSettings बनाम ऐप्लिकेशन सैटिंग्स के पेशेवरों और विपक्ष (.NET app.config / Web.config) urllib और "SSL: CERTIFICATE_VERIFY_FAILED" त्रुटि प्रत्येक समूह के भीतर एक अल्पविराम से अलग स्ट्रिंग को कॉलम संकलित / एकत्रित करें / समस्त करें MATLAB में अज्ञात लंबाई का मैट्रिक्स? टपल पर फिर से चलना MySQL में कमांड लाइन का उपयोग कर SQL फ़ाइल कैसे आयात करें? कर्ल के साथ $ _POST मान पासिंग एक नेस्टेड जटिल ऑब्जेक्ट से मान प्राप्त करना जिसे आंशिक दृश्य में पारित किया गया है एक्सेल VBA में, मैं उपयोगकर्ता-निर्धारित फ़िल्टर को कैसे सहेज / पुनर्स्थापित करूं? एक गतिविधि के कई उदाहरणों को रोकने के लिए कैसे करें जब इसे विभिन्न इन्टेंट्स के साथ लॉन्च किया जाता है कांस्य 2/4 सेवाओं और घटकों में पाइप का उपयोग करें क्यों कहते हैं कि HTTP एक स्टेटलेस प्रोटोकॉल है?

LINQ में समूह द्वारा

मान लीजिए कि हमारे पास एक वर्ग की तरह है

class Person { internal int PersonID; internal string car ; } 

अब मेरे पास इस वर्ग की List<Person> persons; : List<Person> persons;

अब इस सूची में समान PersonIDs के साथ कई उदाहरण हो सकते हैं, उदाहरण के लिए:

 persons[0] = new Person { PersonID = 1, car = "Ferrari" }; persons[1] = new Person { PersonID = 1, car = "BMW" }; persons[2] = new Person { PersonID = 2, car = "Audi" }; 

क्या कोई तरीका है कि मैं personID द्वारा समूह कर सकता personID और personID सभी कारों की सूची प्राप्त कर सकता हूं?

उदाहरण के लिए, अपेक्षित परिणाम होगा

 class Result { int PersonID; List<string> cars; } 

तो समूह के बाद, मुझे मिल जाएगा:

 results[0].PersonID = 1; List<string> cars = results[0].cars; result[1].PersonID = 2; List<string> cars = result[1].cars; 

मैंने अब तक क्या किया है:

 var results = from p in persons group p by p.PersonID into g select new { PersonID = g.Key, // this is where I am not sure what to do 

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

वेब के समाधान से एकत्रित समाधान "LINQ में समूह द्वारा"

बिल्कुल – आप मूल रूप से चाहते हैं:

 var results = from p in persons group p.car by p.PersonId into g select new { PersonId = g.Key, Cars = g.ToList() }; 

या गैर-क्वेरी अभिव्यक्ति के रूप में:

 var results = persons.GroupBy( p => p.PersonId, p => p.car, (key, g) => new { PersonId = key, Cars = g.ToList() }); 

मूल रूप से समूह की सामग्री (जब एक IEnumerable<T> रूप में देखा जाता है) प्रक्षेपण (इस मामले में p.car ) में दी गई कुंजी के लिए वर्तमान मूल्यों का एक अनुक्रम है।

GroupBy कैसे काम करता है इसके बारे में अधिक GroupBy , विषय पर मेरे एडुलिनैक पोस्ट देखें।

(मैंने PersonId में PersonID को PersonID को बदल दिया है, PersonID PersonId सम्मेलनों का पालन करने के लिए।)

वैकल्पिक रूप से, आप Lookup उपयोग कर सकते हैं:

 var carsByPersonId = persons.ToLookup(p => p.PersonId, p => p.car); 

फिर आप प्रत्येक व्यक्ति के लिए गाड़ियों को बहुत आसानी से प्राप्त कर सकते हैं:

 // This will be an empty sequence for any personId not in the lookup var carsForPerson = carsByPersonId[personId]; 
 var results = from p in persons group p by p.PersonID into g select new { PersonID = g.Key, /**/car = g.Select(g=>g.car).FirstOrDefault()/**/} 
 var results = from p in persons group p by p.PersonID into g select new { PersonID = g.Key, Cars = g.Select(m => m.car) }; 

आप यह भी कोशिश कर सकते हैं

 var results= persons.GroupBy(n => new { n.PersonId, n.car}) .Select(g => new { g.Key.PersonId, g.Key.car)}).ToList(); 

प्रयत्न

 persons.GroupBy(x => x.PersonId).Select(x => x) 

या

यह जांचने के लिए कि क्या कोई व्यक्ति आपकी सूची में दोहरा रहा है

 persons.GroupBy(x => x.PersonId).Select(x => x.Count() > 1).Any(x => x) 

इसे इस्तेमाल करे :

 var results= persons.GroupBy(n => n.PersonId) .Select(g => new { PersonId=g.Key, Cars=g.Select(p=>p.car).ToList())}).ToList(); 

लेकिन प्रदर्शन-वार निम्न अभ्यास बेहतर और अधिक मेमोरी उपयोग में अनुकूलित है (जब हमारी सरणी में लाखों की तरह अधिक वस्तुएं होती हैं):

 var carDic=new Dictionary<int,List<string>>(); for(int i=0;i<persons.length;i++) { var person=persons[i]; if(carDic.ContainsKey(person.PersonId)) { carDic[person.PersonId].Add(person.car); } else { carDic[person.PersonId]=new List<string>(){person.car}; } } //returns the list of cars for PersonId 1 var carList=carDic[1]; 

मैंने क्वेरी सिंटैक्स और विधि सिंटैक्स के साथ काम करने वाला कोड नमूना बनाया है I मुझे उम्मीद है कि यह दूसरों की मदद करता है 🙂

आप नेट बुश पर यहां कोड चला सकते हैं:

 using System; using System.Linq; using System.Collections.Generic; class Person { public int PersonId; public string car ; } class Result { public int PersonId; public List<string> Cars; } public class Program { public static void Main() { List<Person> persons = new List<Person>() { new Person { PersonId = 1, car = "Ferrari" }, new Person { PersonId = 1, car = "BMW" }, new Person { PersonId = 2, car = "Audi"} }; //With Query Syntax List<Result> results1 = ( from p in persons group p by p.PersonId into g select new Result() { PersonId = g.Key, Cars = g.Select(c => c.car).ToList() } ).ToList(); foreach (Result item in results1) { Console.WriteLine(item.PersonId); foreach(string car in item.Cars) { Console.WriteLine(car); } } Console.WriteLine("-----------"); //Method Syntax List<Result> results2 = persons .GroupBy(p => p.PersonId, (k, c) => new Result() { PersonId = k, Cars = c.Select(cs => cs.car).ToList() } ).ToList(); foreach (Result item in results2) { Console.WriteLine(item.PersonId); foreach(string car in item.Cars) { Console.WriteLine(car); } } } } 

यहां परिणाम है:

 1
 फेरारी
 बीएमडब्ल्यू
 2
 ऑडी
 -----------
 1
 फेरारी
 बीएमडब्ल्यू
 2
 ऑडी