IGrouping में "मूल्य" संपत्ति प्राप्त करें


141

मेरे पास एक डेटा संरचना है जैसे

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) बहुत रचनात्मक नहीं था क्योंकि यह किसी भी उत्तर से मेल नहीं खाता।
सनी पटेल

जवाबों:


170

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

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

इसलिए मूल रूप से अगर हम प्रश्न के सार का अनुसरण कर रहे हैं, तो valueइसकी तुलना ToList()केवल एक उपरि से अधिक है, इसे एक सूची में बदलने के लिए केवल एक मान खींचने का विरोध करने के लिए
Coops

2
@CodeBlend अधिक ओवरहेड है क्योंकि वे एक सूची चाहते हैं। अगर वहाँ एक Valuesसंपत्ति की तरह वे कल्पना की थी, तो उन्हें करना होगा group.Values.ToList()। इसके विपरीत यदि वे किसी सूची के बजाय किसी गणना योग्य को स्वीकार new DespatchGroup(group.Key, group)करते हैं तो काम करेंगे। ओवरहेड की परिभाषा DespachGroupआईजीग्रुपिंग के काम करने के तरीके से नहीं है।
जॉन हैना

35

कोई है Valuesसंपत्ति या समान क्योंकि IGrouping<T>खुद हैIEnumerable<T> मूल्यों के अनुक्रम। इस मामले में आपको बस इतना करना है कि अनुक्रम को सूची में परिवर्तित करें:

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

6
यदि हम चाहें तो हम IEnumerable में भी परिवर्तित हो सकते हैं group.AsEnumerable():।
मतीन उल्हाक

22

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

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

2
धन्यवाद! इसके विपरीत .Selectजो एक IGrouping <> फिर .SelectManyसे लौटेगा , वापस आने वाले मूल्यों के प्रकार का एक IEnumerable लौटाएगा, जो कि मैं बाद में था।
K0D4

मैं कहता हूँ कि इसका उपयोग तब करें जब (संभावित) कई समूह चयनित हों। (उर्फ IEnumerable<IGrouping<key,DespatchGroup>>)। अन्यथा, का उपयोग करें toList(), या बस इसे करने के लिए डाली IEnumerable<DespatchGroup>
सेब सेब

21

बस एक संबंधित टिप - चूंकि, अन्य उत्तरों ने कहा है, समूहन एक IEnumerable है, यदि आपको एक विशिष्ट सूचकांक तक पहुंचने की आवश्यकता है जिसका आप उपयोग कर सकते हैं group.ElementAt(i)

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.