2011-01-26 12 views
88

में "मान" संपत्ति मैंजाओ IGrouping

public DespatchGroup(DateTime despatchDate, List<Products> products); 

और मैं ऐसा करने के लिए कोशिश कर रहा हूँ की तरह एक डेटा संरचना है ...

var list = new List<DespatchGroup>(); 

foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate)) 
{ 
    // group.Values is not correct... how do I write this? 
    list.Add(new DespatchGroup(group.Key, group.Values); 
} 

मैं स्पष्ट रूप से के रूप में मैं कर सकते हैं 'IGrouping समझ नहीं कर रहा हूँ टी समूह में डेटा रिकॉर्ड्स को वास्तव में कैसे प्राप्त करें देखें!

+1

संपादन [(Rev2)] (http://stackoverflow.com/revisions/4804477/2) नहीं बहुत रचनात्मक रूप में ऐसा नहीं होता था किसी भी उत्तर से मेल खाते हैं। –

उत्तर

112

समूह IEnumerable<T> लागू करता है - सामान्य मामले में, बस foreachgroup से अधिक कहते हैं। इस मामले में, जब से तुम एक List<T> की जरूरत है: क्योंकि IGrouping<T> ही है मूल्यों का IEnumerable<T> अनुक्रम

list.Add(new DespatchGroup(group.Key, group.ToList()); 
+0

तो मूल रूप से यदि हम 'मूल्य' के सार का पालन कर रहे हैं तो 'toList()' के बराबर है, केवल एक सूची में इसे बदलने के लिए एक ओवरहेड है, क्योंकि केवल – Coops

+1

@ कोडबेंड के मूल्य को खींचने के विपरीत ओवरहेड क्योंकि वे एक सूची चाहते हैं। यदि वहां 'मूल्य' संपत्ति थी, जैसे कि उन्होंने कल्पना की थी तो उन्हें 'समूह' करना होगा। Values.ToList() '। इसके विपरीत यदि उन्होंने किसी सूची के बजाय किसी भी गणना को स्वीकार किया तो 'नया DespatchGroup (group.Key, समूह)' काम करेगा। ओवरहेड 'DespachGroup' की परिभाषा से है, जिस तरह से IGrouping काम करता है। –

24

कोई Values संपत्ति या समान है। के बाद से, के रूप में अन्य उत्तर कहा है, समूहीकरण एक IEnumerable है, तो आप एक विशिष्ट का उपयोग करने की जरूरत है -

list.Add(new DespatchGroup(group.Key, group.ToList()); 
+2

यदि हम चाहें तो हम एक आईनेमरेबल में भी कनवर्ट कर सकते हैं: 'group.AsNumerable() '। –

12

बस एक संबंधित टिप: आप सभी इस मामले में क्या करने की जरूरत एक सूची है कि अनुक्रम में परिवर्तित है इंडेक्स आप group.ElementAt(i) का उपयोग कर सकते हैं।

यह शायद बहुत से लोगों के लिए स्पष्ट है लेकिन उम्मीद है कि इससे कुछ मदद मिलेगी!

1

किसी भी चयनित समूह के लिए, आप कह सकते हैं

var selectedGroupValues=selectedGroup.SelectMany(x=>x);